前言
记录学习过程,上接上一节,绑定控制器类处理方法入参
控制器类处理方法的返回值类型
SpringMVC返回类型不仅仅有字符串,还可以是ModelAndView、MOdel、Map等等
如果返回类型是ModelAndView,其中可包含视图和模型信息,SpringMVC会将模型信息存放在request域中
例:
(1)在HelloController中添加方法returnModelAndView
@RequestMapping("/returnModelAndView")
public ModelAndView returnModelAndView(){
String viewName="success";//ModelAndView属性名
ModelAndView modelAndView=new ModelAndView(viewName);
Users users=new Users("zhangsan","123456",new Address("jiangxi","nanchang"));
modelAndView.addObject("users",users);//将users对象添加到ModelAndView
return modelAndView;
}
(2)index.jsp界面添加超链接
<a href="/springmvc/returnModelAndView">ModelAndView</a><br>
(3)success.jsp界面添加用于访问ModelAndView对象中保存的Users对象的requestScope对象,
<body>
欢迎光临
<br>
ModelAndView:${requestScope.users}
</body>
(4)测试成功
注意
这里可能会出现一个bug,spring找不到ModelAndView
这是ModelAndView包导错了。。。
默认的org.springframework.web.portlet.ModelAndView这个包是错的
应该是org.springframework.web.servlet.ModelAndView这个包
保存模型属性到HttpSession
通过在控制器类上标注@SessionAttribute注解,可将模型数据保存在HttpSession中,以便多个请求之间共用该模型数据
例:
(1)在HelloController类添加方法sessionAttribute,在控制器类HelloController上标注@SessionAttributes(value = “user”)
@RequestMapping("/sessionAttribute")
public String SessionAttribute(ModelMap modelMap){
Users users=new Users("zhangsan","123456",new Address("jiangxi","nanchang"));
modelMap.put("users",users);
return "success";
}
(2)index.jsp上添加超链接
<a href="/springmvc/sessionAttribute">SessionAttribute</a>
在success.jsp上添加用于访问保存在httpSession中的user对象
SessionAttribute:${sessionScope.user}
(3)测试成功
在控制器类方法之前执行的方法
想让一个方法在控制器类的所有处理方法之前执行,可以通过在该方法上标注@ModelAttribute注解实现
例:
(1)在HelloController中添加方法getUsers、modelAttribute
@ModelAttribute
public Users getUsers(Model model){
Users users=new Users("lisi","111111",new Address("jiangxi","shangrao"));
model.addAttribute("user",users);
return users;
}
@RequestMapping("/modelAttribute")
public String modelAttribute(Users users){
System.out.println(users);
return "success";
}
(2)在index.jsp中添加超链接
<a href="/springmvc/modelAttribute">ModelAttribute</a>
(3)测试成功
点击ModelAttribute链接时,请求被HelloController类的modelAttribute方法处理,在执行该方法之前,先调用了getUsers方法,实例化对象users并存入model,getUsers方法返回了该对象,被传递给modelAttribute方法的参数users
对象users被存入Model,访问request作用域可以得到对象users,对象users没有保存在httpSession中,访问session作用域无法获取对象(在HelloController上已经将上面的@SessionAttributes(value = “users”)注释)
那如果没有注释@SessionAttributes(value = “users”),发现
在@SessionAttributes和@ModelAttribute一起用时,对象可以通过@ModelAttribute(“”)绑定到Session,所以session作用域也可以获取到users对象
明白这些需要更深层的了解@SessionAttributes和@ModelAttribute