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没有区别.