@ModelAttribute注解的使用

1,416 阅读1分钟

在SpringMVC中使用@ModelAttribute

1. @ModelAttribute用于前后端不分离的场景,如jsp,thymeleaf

2. 被@ModelAttribute注解的方法会在Controller每个方法执行之前都执行

3. @ModelAttribute应用在方法上(无返回值)

@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {

    @ModelAttribute
    public void myModel(@RequestParam(required = false) String abc, Model model) {
        model.addAttribute("attributeName", abc);
    }

    @RequestMapping(value = "/method")
    public String method() {
        return "method";
    }
}

这个例子,在请求/modelattribute/method?abc=aaa后,会先执行myModel方法,然后接着执行method方法,参数abc的值被放到Model中后,接着被带到method方法中,进入method方法时,Model内部已经被存入了{'attributeName', abc}这个键值对。

如果把myModelmethod合二为一,代码如下,这也是我们最常用的方法:

@RequestMapping(value = "/method")
public String method(@RequestParam(required = false) String abc, Model model) {
  model.addAttribute("attributeName", abc);
  return "method";
}

4. 使用@ModelAttribute注解带有返回值的方法

@ModelAttribute
public String myModel(@RequestParam(required = false) String abc) {
    return abc;
}

@ModelAttribute(name = "stu")
public Student myModel(@RequestParam(required = false) String abc) {
    Student student = new Student(abc);
    return student;
}

@ModelAttribute(value = "num")
public int myModel(@RequestParam(required = false) int number) {
    return number;
}

带返回值的情况下,返回值对象会被默认放到隐含的Model中,在Model中的key返回值首字母小写value为返回的值。当带有参数name时,则指定了自定义的key,参数value和name互为别名。以下为上述代码的结果

model.addAttribute("string", abc);
model.addAttribute("stu", student);
model.addAttribute("num", number);

参考文章:www.jianshu.com/p/0ec4e7afb…