Spring-@ModelAttribute

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值