作用:
先从数据库拿数据创建一个对象,然后再从表单传来的数据中拿数据进行修改。
public class SpringMVCTest
{
@ModelAttribute
public void getUser(@RequestParam(value="id",request=false)) Integer id,
Map<String,Object> map
{
if(id!=null)
{ //模仿从数据库获值
User user=new User(1,"Tom","123456","tom@atguigu.com",12);
map.put("user",user);
}
}
@RequestMapping("/testModelAttribute")
public String testMOdelAttribute(User user)
{
System.out.println("修改",user);
return "success"
}
}
1. 调用 @ModelAttribute 注释的方法 从数据库中获取数据 创建对象加入到Map中;
2.再从Map中取出对象并根据表单进行赋值修改
3.将对象传入调用的handler方法;
SpringMVC 确定目标方法POJO类型入参的过程:
1.确定一个key:
1)如果目标方法的POJO类型参数没有使用@ModelAttribute 作为修饰,则key为POJO类名第一个字母的小写
2)。。。。。。。。。。。。。。使用了@ModelAtrribute作为修饰,则key为注释value的属性值;
2.在implicitModel 中查找key对应的对象,若存在,则作为入参传入
1)若在@ModelAttribute 标记的方法中的Map中保存过,切key和1确定的key一直,则会获得到。、
3.若implicitModel 中不存在key对应的对象,则检查当前的Handler是否使用@SessionAttribute,注解修饰,
如使用了@SessionAttributes 注解的value属性中包含了key,则会从HttpSession中获取key所对应的value值,若存在则直接传入
目标方法的入参中,若不存在则将抛出异常(这种情况是有对应key 没有value)。
4.若Handler 没有标识 @SessionAttribute 注解或@SessionAttributes 中没有对应的key;则会通过反射来创建POJO类型的参数
,传入为目标方法的参数。
5.springMVC 会把 key和POJO 类型的对象保存在implicitModel中,进而保存到request中
,