- @ModelAttribute标注可被应用在方法或参数上。
- 在同一个控制器中,标注了@ModelAttribute的方法实际上会在@RequestMapping方法之前被调用
@ModelAttribute方法通常被用来在请求方法执行前,预先填充一些公共需要的属性或数据到Model中
- 标注在方法上的@ModelAttribute说明方法是用于添加一个或多个属性到model上。这样的方法能接受与@RequestMapping标注相同的参数类型,只不过不能直接被映射到具体的请求上。
参数 |
描述 |
value |
要绑定到的模型属性的名称 |
name |
name属性的别名 |
binding |
声明是否启用数据绑定,默认为true |
示例
@Controller
public class ModelAttributeParamController {
//作用在方法上,返回的值携带到其他方法的Model中,并注入到请求方法的视图参数中
@ModelAttribute(value = "attributeName")
public String myModel(@RequestParam(required = false) String value) {
return value;
}
//作用在参数上,参数直接加入Model,并注入到方法的视图参数中
@RequestMapping(value = "/param")
public String param(@ModelAttribute("name") String str2, @ModelAttribute("age") int str3) {
return "param"; //返回视图
}
}
注
如果@ModelAttribute注解在使用了@RequestMapping的方法上,那么返回的字符串被指定为数据,而不是视图
注解无返回值的方法
- 在请求时,会先执行标注了@ModelAttribute的方法,然后接着执行请求的方法,参数value的值被放到Model中后,接着被带到请求的方法中。
- 当返回视图时,Model会被带到页面上,当然你在使用@RequestParam的时候可以使用required来指定参数是否是必须的
示例
@Controller public class ModelAttributeController {
@ModelAttribute public void myModel(@RequestParam(required = false) String value, Model model){ model.addAttribute("attributeName", value); //value参数通过model加入视图 }
@RequestMapping("/method") public String method(){ return "method"; } } |
注解有返回值的方法
- 对于这种情况,返回值对象会被默认放到隐含的Model中,在Model中的key为返回值首字母小写,value为返回的值
示例
@Controller
public class ModelAttributeController {
@ModelAttribute
public String myModel(@RequestParam(required = false) String value) {
return value;
}
@ModelAttribute("num")
public String myModel(@RequestParam(required = false) int number) {
return value;
}
@ModelAttribute
public Student myModel(@RequestParam(required = false) String name) {
Student student = new Student(name);
return student;
}
}
等同于:
model.addAttribute("string", value);
model.addAttribute("num", number);
model.addAttribute("student", student);