- 由@ModelAttribute标记的方法,会在目标方法执行之前被SpringMVC调用。
- @ModelAttribute注解也可以用来修饰目标方法POJO类型的入参,其value属性值有如下作用:
(1)SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中;
(2)SpringMVC会以value为key,POJO类型的对象为value,存入到request中。
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,Map<String,Object> map) {
System.out.println("modelAttribute method");
if (id != null){
//模拟从数据库中获取对象
User user = new User(1,"Tom","123456","tom@qq.com",12);
System.out.println("从数据库中获取一个对象:" + user);
map.put("user",user);
}
}
/**
* 运行流程:
* 1.执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放入Map中,键为:user;
* 2.SpringMVC从Map中取出user对象,并把表单的请求参数赋给该User对象的对应属性;
* 3.SpringMVC把上述对象传入目标方法的参数。
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("修改:" + user);
return SUCCESS;
}
注意: 在@ModelAttribute修饰的方法中,放入map中的键需要和目标方法入参类型的第一个字母小写的字符串一致;若不一致,则需用@ModelAttribute修饰目标方法的入参,代码如下:
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,Map<String,Object> map) {
System.out.println("modelAttribute method");
if (id != null){
//模拟从数据库中获取对象
User user = new User(1,"Tom","123456","tom@qq.com",12);
System.out.println("从数据库中获取一个对象:" + user);
map.put("abc",user);
}
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user) {
System.out.println("修改:" + user);
return SUCCESS;
}