@ModelAttribute 注解

时间:2022-05-12
本文章向大家介绍@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中

  • 在类级别中
  • 在类级别中使用@SessionAttributes,作用是在controller中共享这个model,直到org.springframework.web.bind.support.SessionStatus#setComplete会清空session值,或者是session过期
1 @Controller  
2 @RequestMapping("user")  
3 @SessionAttributes("test")  
4 public class TestController {

  }
 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先存在