ModelAttribute:
@ModelAttribute 绑定请求参数到命令对象
@ModelAttribute一个具有如下三个作用:
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑
定流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用
对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping 注解的方法)之前,自动添加
到模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping 方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为
模型数据,用于视图页面展示时使用。
运行原理:
/*
在modelattribute修饰的方法中,放入到map时的键需要和目标方法入参类型的第一个字母小写的字符串一致
*/
@ModelAttribute
public void getUser(@RequestParam(value="name",required=false)String name,
Map<String, Object> map){
if(name != null){
//模拟从数据库中获取对象
User user = new User("liu", "12");
System.out.println("从数据库中获取一个对象"+user);
map.put("user", user);
}
}
@RequestMapping("testModelAttribute")
public String testModelAttribute(User user){
System.out.println("修改"+user);
return "success";
}
在某一个时刻,springmvc将modelattribute中的数据取出来,并且赋给test方法。
运行流程: 执行@modelattribute注解修饰的方法:从数据库中取出对象,将对象放入map中,键为user
2: spring mvc 从map中取出user对象,并把表单的参数请求赋给该user对象的对应属性
3: springmvc 把上述对象传入目标方法的参数。