@ModelAttribute 注解

最近用到了@ModelAttribute,就顺便学习下。

 

  •  在方法级别使用时,比如

1 @ModelAttribute
2 public void addAttributes(Model model) {
3     model.addAttribute("msg", "hello world!");
4 }
在这个例子中,我们展示了一个方法,它将一个msg属性添加到Model中。
通常,在调用方法前,SpringMvc会始终先调用该方法,类似与我们用到的拦截器,过滤器。优先级别在方法中最高。(注意,只在同一个controller时)
 
1 @ModelAttribute("user1")
2 public void addAttributes(User user) {
3    
4 }
在这里,ModelAttribute有了一个user1,然后参数是user,所以在Model中会存在2个对象,user和user1
 
  • 在方法中,

 

  
1 @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
2 public String submit(@ModelAttribute("employee") Employee employee) {
3  
4     return "employeeView";
5 }
参数会中模型中查找,也就是比如我们提交一个form表单时,可以使用这种方法来获取一个对象,比如会先在model中先获取employee的对象,如果获取不到就会先通过反射来实例化,然后从request里面的值来set实例化的对象,然后把这个对象添加到model中
  • 在类级别中

  • 1 @Controller  
    2 @RequestMapping("user")  
    3 @SessionAttributes("test")  
    4 public class TestController {

      }
    在类级别中使用@SessionAttributes,作用是在controller中共享这个model,直到org.springframework.web.bind.support.SessionStatus#setComplete会清空session值,或者是session过期

 

  

 1 @Controller
 2 @RequestMapping("user")
 3 @SessionAttributes("test")
 4 public class TestController {
 5 
 6     @RequestMapping(value = "test1")
 7     public String test1(HttpServletRequest request) {
 8         request.getSession().setAttribute("test",user);  
 9         
10     }
11 
12     @RequestMapping(value = "test2")
13     public String test2(@ModelAttribute("test") User user,SessionStatus sessionStatus) {
14         return null;
15     }
16 }

 

在这个代码中,会先调用test1再调用test2,因为在test1中设置test,因为使用了@SessionAttributes("test"),会确保test先存在
 
 
posted @ 2018-04-08 21:08  haoming1100  阅读(445)  评论(0编辑  收藏  举报
本文作者: haoming1100 博客链接: http://www.cnblogs.com/haoming1100 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载时必须带上原文链接!