一、没有使用@ModelAttribute的Controller方法.

    @RequestMapping("/save")
public String save(User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}
  • 其中User包含id和username两个私有属性,含有公共setter和getter方法.
    执行此方法时会将key为"user"(参数类型首字母小写),value为user的对象加入到model中.在jsp页面可以通过${user.id}和${user.name}得到值的,即上面方法和下面方法是相当的.

        @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("user1")
public User addUser(User user) {
return new User(520,"I love U");
}
  • 执行UserController内带有@RequestMapping的方法之前,都会先执行此addUser方法.并且执行addUser过程中会添加两个对象到model,先将key为"user"的对象(由addUser方法的User user引起的),再添加key为"user1"的对象(由注解@ModelAttribute("user1")引起的).这样model中就有两个User的对象,一个对象名为user1值为new User(520,"I love U"),另一个对象名为“user”(形参对象类型首字母小写)值为jsp页面传过来的值set到user中。

三、在方法参数上使用@ModelAttribute

    @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

    @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类型对象

五、另类

    @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".相信一般开发者都不会这样用.

最新文章

  1. MyBatis源码分析(一)开篇
  2. SpaceBase – 基于 Sass 的响应式 CSS 框架
  3. Java_解密ThreadLocal
  4. qq临时会话设置
  5. 社交网站好友储存设计和实现(PHP+MySQL)
  6. c++重载运算符注意
  7. Java SE、Java EE和Java ME有什么区别?
  8. Codeforces Round #326 (Div. 2) A. Duff and Meat 水题
  9. 辛星浅谈PHP的混乱的编码风格
  10. 浅析ASP.NET的状态保持
  11. 第十一章 认识与学习BASH
  12. 使用Xamarin在Visual Studio中开发Android应用
  13. C语言_cmd_pause
  14. 职责链模式(Chain of Responsibility)的Java实现
  15. selenium+python自动化测试系列(一):登录
  16. MyEclipse2014搭建JSF项目实例
  17. [Linux] memache打印所有的key
  18. 20175236 JAVA MyCP(课下作业)
  19. python之函数递归
  20. C++点和箭头操作符用法区别

热门文章

  1. PHPStorm 快捷键大全(Win/Linux/Mac)
  2. What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
  3. mybatis bind标签
  4. 初识kaggle,以及记录 kaggle的使用
  5. Java设计模式: 单例模式
  6. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_09-前端显示当前用户-需求分析
  7. Chrome浏览器控制网速的方法
  8. No WebApplicationContext found: no ContextLoaderListener registered
  9. Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager等的详细解说
  10. 《剑指offer》数学题及其它 (牛客11.05)