SpringMVC 处理数据模型还是比较简单,概念都比较一致最经典的就是ModelAndView,以下就是SpringMVC所提供的数据模型:
1、ModelAndView 作为请求处理方法的返回类型,在该对象中可以添加相应属性到数据模型当中
2、@ModelAttribute: 方法入参注解后,入参会自动放置到数据模型当中。
3、Map 和 Model :入参为org.springframework.ui.ModelMap org.springframework.ui.Map 或者 java.util.Map时,为这个参数添加keyAndView则为这个数据模型添加相应的参数
4、@SessionAttribute : 获得session中的数据
ModelAndView的用法:
@RequestMapping(value = "/register.action", method = RequestMethod.POST) public ModelAndView registerAction(User user) { this.userService.saveUser(user); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("user/main"); modelAndView.addObject("user", user); return modelAndView; }
@ModelAttribute的用法:
@RequestMapping(value = "/main.html") public String mainHtml(@ModelAttribute("user") User user, HttpSession session) { return "user/main"; }通过传参的方式自动装配为user对象,然后这个入参对象加入到数据模型当中。
Map 和 Model,这个和ModelAndView类似:
@RequestMapping(value = "/list") public String userList(int start, int end, ModelMap modelMap) { List<User> userList = this.userService.getUserByIdRange(start, end); modelMap.addAttribute("userList", userList); return "user/list"; }通过入参为ModelMap,直接为这个ModelMap添加数据模型,Map同理
@SessionAttribute 使用如下,首先我们需要将一个数据放入session当中:
@RequestMapping(value = "/main.html") public String mainHtml(@ModelAttribute("user") User user, HttpSession session) { session.setAttribute("loginUser", user); return "user/main"; }
在controller类中打上@SessionAttribute标记在这个Controller需要获得什么session数据
@SessionAttributes("loginUser") public class UserController {
通过@ModelaAttribute获得相应的session数据
@RequestMapping("sessionUser.json") @ResponseBody public User getSessionUser(@ModelAttribute("loginUser") User user) { user.setUserId(user.getUserId() + 1); return user; }
需要注意的是@ModelAttribute还可以注解到方法当中:
@ModelAttribute("user") public User getUserAttribute(){ User user = new User(); user.setPwd("TONYPWD"); user.setUsername("TONY"); user.setUserId(999); return user; }
这样的做法是,当这整个controller任意一个方法被调用时(当然是通过HTTP请求的方式),都会从getUserAttribute这个方法当中的返回值获得一个User对象并存储到名为user的数据模型属性中。
数据模型还是比较简单的,我的建议是选择自己方便的做法就可以了,没有必要都全记住,例如@SessionAttribute 对于我来说还是用的非常少的。