参考:Spring 3.x 企业应用开发实战 第15章:SpringMvc 页码:532
ModelAttribute 从字面上解释就是模型的属性。
对于MVC框架来说是模型数据是最重要的,因为控制(C)是为了产生模型数据(M),而视图(V)则是为了渲染模型数据。
Spring Mvc提供了多种途径输出模型数据。
1.ModelAndView 返回ModelAndView对象 public ModelAndView request();
2.@ModeAttribute 在入参的时候标准该注解,入参的对象就会放到数据模型中。 public String request(@ModelAttribute(“user”)User user);
3.Map 及Model 添加此类入参 public String request(Model model,Map map);
4.@SessionAttribute
从上可知 @ModelAttribute 注解就是用来输出模型数据的。
第一种用法:入参的时候加入注解
@RequestMapping("testModelAttribute") public String testModelAttribute(@ModelAttribute("user") User user, ModelMap modelMap) { user.setUserName("mindong"); modelMap.put("password",123456); return "test"; }
在test.jsp页面上使用 ${user.userName}<br> ${password} 就可以获取user的属性和你设置的属性了。
第二种用法:在方法前加入注解
@RequestMapping("testModelAttribute") public String testModelAttribute(@ModelAttribute("user") User user, ModelMap modelMap) 1 { user.setUserName("mindong"); modelMap.put("password",123456); return "test"; } @ModelAttribute("user") public User initUser() { User user = new User(); user.setUserId(1); user.setUserName("mindong"); return user; }
调用testModelAttribute方法时,会先去调用使用了@ModelAttribute的 initUser 方法,并将返回值添加到模型中,由于InitUser方法的@ModelAttribute 和 testModelAttribute方法入参的@ModelAttribute 属性相同,都是user。
这是SpringMvc会将initUser中获得的属性先赋值给testModelAttribute的user,然后根据Http请求传参对user进行覆盖,这样得到一个整合版本的user对象。