SpringMVC处理模型数据(1)

本文介绍SpringMVC中处理模型数据的三种主要方法:使用ModelAndView、Map及Model以及SessionAttributes。通过实例展示了如何利用这些方法添加模型数据并设置视图。

 

Spring MVC 提供了以下几种途径输出模型数据:
ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
Map 及 Model: 入参为  org.springframework.ui.Model、org.springframework.ui.  ModelMap 或 java.uti.Map 时,处理方法返回时,Map  中的数据会自动添加到模型中。
@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性

 

@ModelAttribute:方法入参标注该注解后, 入参的对象  就会放到数据模型中

在本文中中重点讨论前三种方式,因为最后一种需要花大量的篇幅来讲解。详见SpringMVC处理模型数据(2)

演示代码的顺序按照index.jsp(初始界面),Controller控制器,success.jsp(显示结果)

1、ModelAndView

控制器处理方法的返回值如果为 ModelAndView, 则其既  包含视图信息,也包含模型数据信息。
添加模型数据的方法:
1)、添加单个键值对(有点类似request域对象的setAttribute方法)
MoelAndView addObject(String attributeName, Object  attributeValue)
2)、添加多个键值对,即直接添加一个map集合
ModelAndView addAllObject(Map<String, ?> modelMap)
设置视图的方法:
1)、设置视图对象
void setView(View view)
2)、设置视图名
void setViewName(String viewName)

 

SpringMVC会把 ModelAndView 中的 model 数据放入 Request 域对象中

<a href="springmvc/testModelAndView">testModelAndView</a>
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
	// 创建一个ModelAndView类型的对象,指定视图名称
	ModelAndView modelAndView = new ModelAndView(SUCCESS);
	// 为modelAndView添加modle数据
	modelAndView.addObject("time", new Date());
	return modelAndView;
}
<h3>${requestScope.time}</h3>

 

 

 

2、Map 及 Model

目标方法的入参可以是Map类型(实际上也可以是Model类型或者ModelMap类型)
* SpringMVC会将此Map数据作为ModelAndView的model
* 将目标方法的返回值作为ModelAndView的view

<a href="springmvc/testMap">testMap</a>
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
	map.put("names", Arrays.asList("Tom","Jerry","mike"));
	return SUCCESS;
}
<h3>${requestScope.names}</h3>

 

 

 

3、SessionAttributes

目标方法默认会将参数放在Request域对象中,加上此注解可以将参数同时放在Session域对象中
* 注意,此注解只能使用在类的上面
* 使用此注解时有两种方式可以指定哪些数据会被放在HttpSession中
* 第一种方式是直接指定参数名称:也就是使用value属性
* 第二种则是指定参数的类型:也就是使用types属性,比如types = String.class
* 当然,两种属性都支持多值操作

<a href="springmvc/testSessionAttributes">testSessionAttributes</a>
@SessionAttributes(value = "user",types = String.class)
@RequestMapping("/springmvc")
@Controller
public class RequestMappingTest {
	public final static String SUCCESS = "success";
	@RequestMapping("/testSessionAttributes")
	public String testSessionAttributes(Map<String, Object> map) {
		User user = new User("rgx", "123456", "rgx@love.com", 21, new Address("Hubei", "Yichang"));
		map.put("user", user);
		map.put("school", "CTGU");
		return SUCCESS;
	}
}	@RequestMapping("/testSessionAttributes")
	public String testSessionAttributes(Map<String, Object> map) {
		User user = new User("rgx", "123456", "rgx@love.com", 21, new Address("Hubei", "Yichang"));
		map.put("user", user);
		map.put("school", "CTGU");
		return SUCCESS;
	}
}
request:<h3>${requestScope.user}</h3>
<br><br>
session:<h3>${sessionScope.user}</h3>
<br><br>
request:<h3>${requestScope.school}</h3>
<br><br>
session:<h3>${sessionScope.school}</h3>

注意上面的控制器代码中存在SessionAttributes注解,两个属性value和types分别决定将什么对应参数名或者对应类型的model属性数据被放入HttpSession作用域内。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值