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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值