1.作用于方法上。
例如:
@ModelAttribute("driverTest")
public
Driver initDriver(){
return
setDriver();//这里调用其他方法,无需管
}
//司机复职
@RequestMapping("reinstatementDriver")
@ResponseBody
public
Map<String,Boolean> reinstatementDriver(@ModelAttribute(value
= "driverTest") Driver driver,HttpSession session){
Map<String,Boolean> result =
new
HashMap<String,Boolean>();
Driver driverTemp =
null;
String status =
"SUCCESS";
Boolean sign = Boolean.TRUE;
result.put(status,sign);
return
result;
}
解析:针对方法级别上(其实更像将这个映射的数据作为该类下的全局属性,供所有方法使用,但是注意我的说明)使用@ModelAttribute存在两种情况:
1.上述代码显示的,在@ModelAttribute("driverTest"),则在reinstatementDriver()方法中如果想获取方法界别上映射好的数据,则其映射的参数也应和方法级别上的命名一致@ModelAttribute(value
= "driverTest") Driver driver,否则无法将其映射到reinstatementDriver上的driver上,当然修饰方法级别的返回值类型应和reinstatementDriver映射的参数保持一致(否则会报异常)。
2.方法级别上只使用@ModelAttribute(而并没有设置其别名即value值),这时只要有方法且该方法参数中含有@ModelAttribute修饰的方法返回值,则就会被映射上去。
ps:
@ModelAttribute("driverTest")
public
Driver initDriver(){
return
setDriver();//这里调用其他方法,无需管
}
//司机复职
@RequestMapping("reinstatementDriver")
@ResponseBody
public
Map<String,Boolean> reinstatementDriver(@ModelAttribute
Driver driver,HttpSession session){
Map<String,Boolean> result =
new
HashMap<String,Boolean>();
Driver driverTemp =
null;
String status =
"SUCCESS";
Boolean sign = Boolean.TRUE;
result.put(status,sign);
return
result;
}
假设要执行保存用户操作,根据一分析可知,先执行完会产生两个Driver类型的对象(一个key是"driver",另一个key是"driverTest")添加到model,再执行reinstatementDriver方法,此时会先从model去找key为"driver"的对象,能找到再从request取值set到这个Driver对象.最后返回到jsp页面,model里也只有两个Driver
类型对象.
再来个小小假设,将上面@ModelAttribute("driverTest")的driverTest改为driver,其它不变.虽然执行了initDriver方法,那么执行到reinstatementDriver方法内,driver对象的字段值还是来源于请求,最后返回到jsp页面,model里也只有一个driver类型对象.
1.作用于方法参数上。
@RequestMapping("reinstatementDriver")
@ResponseBody
public
Map<String,Boolean> reinstatementDriver(@ModelAttribute
Driver driver,HttpSession session){
Map<String,Boolean> result =
new
HashMap<String,Boolean>();
Driver driverTemp =
null;
String status =
"SUCCESS";
Boolean sign = Boolean.TRUE;
result.put(status,sign);
return
result;
}
此方法会先从model去获取key为"driver"的对象,如果获取不到会通过反射实例化一个Driver对象,再从request里面拿值set到这个对象,然后把这个Driver对象添加到model(其中key为"driver").
使用了@ModelAttribute可修改这个key,不一定是"driver",此情况下,用与不用@ModelAttribute没有区别.