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 對於我來說還是用的非常少的。