在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}这个键值对。
如果把myModel和method合二为一,代码如下,这也是我们最常用的方法:
@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);