springside4项目源码研读(3) -- springmvc实现参数的二次绑定
来源:互联网 发布:pdg2pic mac 编辑:程序博客网 时间:2024/06/01 23:01
二次绑定以前是听说过的,当时那个项目领导说的神乎其神,感觉也很牛逼的样子,不过今天看了看就是一种思路,也就那么回事吧。
假设这样的一个场景:用户更新功能,但jsp页面只允许用户更改用户名和密码,角色,权限,注册时间什么的就不让你更改了,也就是form表单向后台只传递username,password两个参数,此时就应该用到参数的二次绑定了。
详细代码请看 springside4的quickstart项目中的UserAdminController.java中的update方法:
@RequestMapping(value = "update", method = RequestMethod.POST)
public String update(@Valid @ModelAttribute("user") User user, RedirectAttributes redirectAttributes) {
accountService.updateUser(user);
redirectAttributes.addFlashAttribute("message", "更新用户" + user.getLoginName() + "成功");
return "redirect:/admin/user";
}
@ModelAttribute
public void getUser(@RequestParam(value = "id", defaultValue = "-1") Long id, Model model) {
if (id != -1) {
model.addAttribute("user", accountService.getUser(id));
}
}
springmvc用到二次绑定的关键点在于@ModelAttribute这个注解,这个注解会在每个@requestMapping映射到的方法执行之前先执行@ModelAttribute
映射的方法也就是getUser这个方法。由getUser方法可知:就在request上加上一个user的attribute。方法执行完,开始进入update方法,
而在@ModelAttribute("user")又将其取出,此时的User已经有的属性值,然后form表单的属性值在这里覆盖掉相应的属性值,这就是所谓的二次绑定,
form没有传递的属性,沿用getUser中的user属性值,这个就不会出现你在这里new一个user然后只能设置username和password属性,其他属性
你如果通过user.id找到user还要手动设置下其他属性,如果你找不到原来的user其他属性,就会覆盖掉原来user的属性值,导致更新后的user
只有username和password两个属性,其他属性都变成了null。
这就是参数的二次绑定。
- springside4项目源码研读(3) -- springmvc实现参数的二次绑定
- springside4项目源码研读(1)
- springside4项目源码研读(2)
- springmvc 的参数绑定
- springmvc的参数绑定
- springmvc的参数绑定
- springmvc的参数绑定
- Struts2参数二次绑定
- SpringMVC各种参数的绑定
- SpringMVC各种参数的绑定
- springMVC的参数绑定方式
- 关于springMVC参数的绑定
- springmvc自定义参数绑定实现日期参数绑定
- springmvc(3)----参数绑定
- SpringMVC基础-3-参数绑定
- SpringMVC(二)—实现参数绑定
- SpringMVC实现自定义类型参数绑定
- struts2 参数绑定和二次绑定
- #pragma unroll的用法
- [学习笔记]JSP自定义标签(1)
- 核心动画(基础动画)
- 求链表的长度
- hdu 1692(枚举+剪枝)
- springside4项目源码研读(3) -- springmvc实现参数的二次绑定
- Unity3D性能优化:DrawCall优化
- [学习笔记]JSTL使用总结(2)
- Oracle的硬解析和软解析
- python 正则表达式
- cocos2dx的数据保存之UserDault
- [学习笔记]JSTL使用总结(1)
- PHPH中的超全局数组
- 魔板拼图