数据模型访问结构
通过ModelAndView访问数据模型
@RequestMapping(method = RequestMethod.POST)
public ModelAndViewcreateUser(User user) {
userService.createUser(user);
ModelAndView mav= new ModelAndView();
mav.setViewName("user/createSuccess");
mav.addObject("user", user);
return mav;
}
访问数据模型:@ModelAttribute
访问数据模型:Map及Model org.springframework.ui.Model和java.util.Map:
@RequestMapping(value = "/handle63")
public String handle63(ModelMap modelMap){
modelMap.addAttribute("testAttr","value1");
User user = (User)modelMap.get("user");
user.setUserName("tom");
return "/user/showUser";
}
Spring MVC一旦发现处理方法有Map或Model类型的入参,就会将请求内在的隐含模型对象的引用传给这些入参。
访问数据模型:@SessionAttributes
如果希望在多个请求之间共用某个模型属性数据,则可以在控制器类标注一个@SessionAttributes,Spring MVC会将模型中对应的属性暂存到HttpSession中:
对入参标注@ModelAttribute(“xxx”)的处理方法,Spring MVC按如下流程处理(handle71(@ModelAttribute(“user”) User user)):
1.如果隐含模型拥有名为xxx的属性,将其赋给该入参,再用请求消息填充该入参对象直接返回,否则到2步。
2.如果xxx是会话属性,即在处理类定义处标注了@SessionAttributes("xxx"),则尝试从会话中获取该属性,并将其赋给该入参,然后再用请求消息填充该入参对象。如果在会话中找不到对应的属性,则抛出HttpSessionRequiredException异常。否则到3。
3.如果隐含模型不存在xxx属性,且xxx也不是会话属性,则创建入参的对象实例,再用请求消息填充该入参。
避免抛出HttpSessionRequiredException异常?