springMVC 处理模型数据的四种方式
ModelAndView: 处理方法返回值类型为 ModelAndView
时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参为
org.springframework.ui.Model、org.springframework.ui.
ModelMap 或 java.uti.Map 时,处理方法返回时,Map
中的数据会自动添加到模型中@SessionAttributes: 将模型中的某个属性暂存到
HttpSession 中,以便多个请求之间可以共享这个属性@ModelAttribute: 方法入参标注该注解后, 入参的对象
就会放到数据模型中
ModelAndView
控制器处理方法的返回值如果为 ModelAndView, 则其既
包含视图信息,也包含模型数据信息示例代码
/*
* 目标方法的返回值可以是 ModelAndView 类型的
* 其中可以包含视图信息和模型信息
* springMVC 会把 ModelAndView 的model中的数据放入到request的域对象中
*/
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView() {
ModelAndView mv = new ModelAndView();
mv.addObject("date", new Date());
mv.setViewName(SUCCESS);
return mv;
}
- helloWorld.jsp
<a href="springMVC/testModelAndView">test ModelAndView</a>
- success.jsp
date:${requestScope.date }
测试图:
Map 及 Model
Spring MVC 在内部使用了一个
org.springframework.ui.Model 接口存
储模型数据Spring MVC 在调用方法前会创建一个隐
含的模型对象作为模型数据的存储容器
– 如果方法的入参为 Map 或 Model 类
型,Spring MVC 会将隐含模型的引用传
递给这些入参。在方法体内,开发者可以
通过这个入参对象访问到模型中的所有数
据,也可以向模型中添加新的属性数据
- 测试代码
/*
* 目标方法可以添加Map 类型,实际上也可以是 Model 类型或者ModelMap 类型的参数,
* 但是推荐使用 Map 类型,spring 会自动装饰这个 Map 类型的参数
*/
@RequestMapping("testMap")
public String testMap(Map<String, Object> map) {
map.put("cars", Arrays.asList("法拉利","玛莎拉蒂","兰博基尼","保时捷"));
return SUCCESS;
}
- success.jsp
cars:${requestScope.cars }
测试图:
@SessionAttributes 注解
若希望在多个请求之间共用某个模型属性数据,则可以在
控制器类上标注一个 @SessionAttributes, Spring MVC
将在模型中对应的属性暂存到 HttpSession 中@SessionAttributes 除了可以通过属性名指定需要放到会
话中的属性外,还可以通过模型属性的对象类型指定哪些
模型属性需要放到会话中示例代码
/*
* @SessionAttributes 注解除了可以通过属性名指定需要放到会话中的属性外(实际上使用的是 value 属性值)
* 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使用的是 type 属性值)
*
* 注意:该注解只能放在类的上面,而不能修饰方法
*/
@RequestMapping("testSessionAttributes")
public String testSessionAttributes(Map<String, Object> map) {
map.put("user", new User("zc-cris", "123", "23"));
map.put("school", "重庆南开中学");
return SUCCESS;
}
- success.jsp
request user:${requestScope.user }
<br><br>
session user:${sessionScope.user }
<br><br>
request school:${requestScope.school }
<br><br>
session school:${sessionScope.school }
示例图: