springmvc的ModelAttribute注解
2015-09-29 12:07
375 查看
参考资料:spring-framework-reference的Using @ModelAttribute on a method和Using @ModelAttribute on a method argument
先看一个没有使用@ModelAttribute的Controller方法.
[java] view
plaincopy
@RequestMapping("/save")
public String save(User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
其中User包含id和username两个私有属性,含有公共setter和getter方法.
执行此方法时会将key为"user"(注意:这里即使参数名称是user1,key一样还是"user"),value为user的对象加入到model.在jsp页面可以通过${user.id}和${user.name}得到值的,即上面方法和下面方法是相当的.
[java] view
plaincopy
@RequestMapping("/save")
public String save(Model model,int id,String username) {
User user=new User();
//这里是通过反射从request里面拿值再set到user
user.setId(id);
user.setUsername(username);
model.addAttribute("user",user);
user.setUsername("U love me");
userService.save(user);
return "result";
}
下面再来看看@ModelAttribute的用法.
一.在方法上使用@ModelAttribute
[java] view
plaincopy
@ModelAttribute("user1")
public User addUser(User user) {
return new User(520,"I love U");
}
假设此方法是写在UserController内,那么执行UserController内带有@RequestMapping的方法之前,都会先执行此addUser方法.并且执行addUser过程中会添加两个对象到model,先将key为"user"的对象(由addUser方法的User user引起的),再添加key为"user1"的对象(由注解@ModelAttribute("user1")引起的).
二.在方法参数上使用@ModelAttribute.
[java] view
plaincopy
@RequestMapping("/save")
public String save(@ModelAttribute User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
此方法会先从model去获取key为"user"的对象,如果获取不到会通过反射实例化一个User对象,再从request里面拿值set到这个对象,然后把这个User对象添加到model(其中key为"user").
使用了@ModelAttribute可修改这个key,不一定是"user",此情况下,用与不用@ModelAttribute没有区别.
三.再来看看在方法和方法参数上结合使用@ModelAttribute,即上面两步的两个方法都添加UserController,如下:
[java] view
plaincopy
@ModelAttribute("user1")
public User addUser(User user) {
return new User(520,"I love U");
}
@RequestMapping("/save")
public String save(@ModelAttribute User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
假设要执行保存用户操作,根据一分析可知,先执行完会产生两个User类型的对象(一个key是"user",另一个key是"user1")添加到model,再执行save方法,此时会先从model去找key为"user"的对象,能找到再从request取值set到这个User对象.最后返回到jsp页面,model里也只有两个User类型对象.
再来个小小假设,将上面@ModelAttribute("user1")的user1改为user,其它不变.虽然执行了addUser方法,那么执行到save方法内,user对象的字段值还是来源于请求,最后返回到jsp页面,model里也只有一个User类型对象.
再来看看另外一种情况:
[java] view
plaincopy
@ModelAttribute
@RequestMapping("/save")
public String save(@ModelAttribute User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
此种情况,会添加一个key为"user"的User对象到model,还会添加一个key为"string",value为"result"的对象到model,而视图名称则变为了"save"而不是"result".相信一般开发者都不会这样用.
转载自:http://blog.csdn.net/xiejx618/article/details/43638537
先看一个没有使用@ModelAttribute的Controller方法.
[java] view
plaincopy
@RequestMapping("/save")
public String save(User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
其中User包含id和username两个私有属性,含有公共setter和getter方法.
执行此方法时会将key为"user"(注意:这里即使参数名称是user1,key一样还是"user"),value为user的对象加入到model.在jsp页面可以通过${user.id}和${user.name}得到值的,即上面方法和下面方法是相当的.
[java] view
plaincopy
@RequestMapping("/save")
public String save(Model model,int id,String username) {
User user=new User();
//这里是通过反射从request里面拿值再set到user
user.setId(id);
user.setUsername(username);
model.addAttribute("user",user);
user.setUsername("U love me");
userService.save(user);
return "result";
}
下面再来看看@ModelAttribute的用法.
一.在方法上使用@ModelAttribute
[java] view
plaincopy
@ModelAttribute("user1")
public User addUser(User user) {
return new User(520,"I love U");
}
假设此方法是写在UserController内,那么执行UserController内带有@RequestMapping的方法之前,都会先执行此addUser方法.并且执行addUser过程中会添加两个对象到model,先将key为"user"的对象(由addUser方法的User user引起的),再添加key为"user1"的对象(由注解@ModelAttribute("user1")引起的).
二.在方法参数上使用@ModelAttribute.
[java] view
plaincopy
@RequestMapping("/save")
public String save(@ModelAttribute User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
此方法会先从model去获取key为"user"的对象,如果获取不到会通过反射实例化一个User对象,再从request里面拿值set到这个对象,然后把这个User对象添加到model(其中key为"user").
使用了@ModelAttribute可修改这个key,不一定是"user",此情况下,用与不用@ModelAttribute没有区别.
三.再来看看在方法和方法参数上结合使用@ModelAttribute,即上面两步的两个方法都添加UserController,如下:
[java] view
plaincopy
@ModelAttribute("user1")
public User addUser(User user) {
return new User(520,"I love U");
}
@RequestMapping("/save")
public String save(@ModelAttribute User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
假设要执行保存用户操作,根据一分析可知,先执行完会产生两个User类型的对象(一个key是"user",另一个key是"user1")添加到model,再执行save方法,此时会先从model去找key为"user"的对象,能找到再从request取值set到这个User对象.最后返回到jsp页面,model里也只有两个User类型对象.
再来个小小假设,将上面@ModelAttribute("user1")的user1改为user,其它不变.虽然执行了addUser方法,那么执行到save方法内,user对象的字段值还是来源于请求,最后返回到jsp页面,model里也只有一个User类型对象.
再来看看另外一种情况:
[java] view
plaincopy
@ModelAttribute
@RequestMapping("/save")
public String save(@ModelAttribute User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
此种情况,会添加一个key为"user"的User对象到model,还会添加一个key为"string",value为"result"的对象到model,而视图名称则变为了"save"而不是"result".相信一般开发者都不会这样用.
转载自:http://blog.csdn.net/xiejx618/article/details/43638537
相关文章推荐
- 修改eclipse界面的颜色
- java基础之Integer和Long对象相等比较 .
- spring集成GZIP
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java Web读取properties配置文件
- Java动态代理的实现机制
- Spring MVC password example
- 关于struts2中ActionContext的实现原理
- SpringMVC存取Session的两种方法
- Java:Character
- Mybatis系列(二)配置
- Spring MVC textbox example
- java 23种设计模式学习。
- Java知识点梳理内部类
- [Java][读书笔记]多线程编程
- java &&与||短路的详解
- 韩顺平 java 第25讲 异常
- Eclipse如何设置字体大小--【Eclipse】
- java生成验证码
- SpringMVC+Spring Data JPA+Shiro+EasyUI简单权限管理系统