• @ModelAttribute使用详解


     

    @ModelAttribute可以作用在方法或者方法的参数

    注:被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。

    一、作用在方法上

    1.@ModelAttribute注释void返回值的方法

    此时给@ModelAttribute设置value是没作用的,他用在有返回值的情况下

        @ModelAttribute
        public void getColor(Model model){
            model.addAttribute("yello");//这句将给model中添加一条key:string  value:yello
         model.addAttribute(1);//这句将给model中添加一条key:integer value:1
      }

     2.@ModelAttribute注释返回具体类的方法

      @ModelAttribute("name")
        public String getColor(Model model){
            model.addAttribute("yello");//这句将给model中添加一条key:string  value:yello
            return "color"; 
    }

    解释:若@ModelAttribute没有设置value=name,那么return "color";这句将给model中添加一条key:string value=color,这个key是根据返回值类型来的

       若@ModelAttribute设置value=name,那么return "color";这句将给model中添加一条key:name value=color

     二、作用在方法的参数上

    1.对象合并

    复制代码
        @ModelAttribute
        public User getUser(){
            User user = new User();
            user.setName("winclpt");
            user.setSex("男");
            user.setAge(25);
            return user;
        }
        @RequestMapping("update")
        public void update(User user){//此处的user来自上面
            user.setSex("女");
            System.out.println(user.toString());
        }
      结果:User [name=winclpt, sex=女, age=25]
    复制代码

    2.对象合并指定对象名称

    复制代码
        @ModelAttribute("MyUser")
        public User getUser(){
            User user = new User();
            user.setName("winclpt");
            user.setSex("男");
            user.setAge(25);
            return user;
        }
        @RequestMapping("update")
        public void update(@ModelAttribute("MyUser") User user){
            System.out.println(user.toString());
        }
        结果:User [name=winclpt, sex=女, age=25]
    
    
    复制代码

    3.如果你的方法参数里带有@ModelAttribute的参数.表示从JSP Page传回的参数并自动的转化为java对象 ,在转换的时候先匹配@ModelAttribute生成的model中匹配属性进行java对象转换,最后再将JSP Page传过来的参数匹配后赋值给java对象属性

    Controller代码如下:

    复制代码
    @Controller
    @RequestMapping("test")
    public class TestController {
        @ModelAttribute("MyUser")
        public User getUser(){
            User user = new User();
            user.setName("winclpt");
            user.setSex("男");
            user.setAge(25);
            return user;
        }
        @RequestMapping("update")
        public void update(@ModelAttribute("MyUser") User user){
            System.out.println(user.toString());
        }
        @RequestMapping("index")
        public String index(){
            return "index";
        }
    }
    复制代码

    index.jsp

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE>
    <html>
      <head>
        <title>spring mvc</title>
      </head>
      <body>
               <h3>modelattrubie</h3>
               <form method="post" action="/springweb/test/update">
                   <label>年龄:</label><input type="text" name="age" value="${user.age }"/>
                   <input type="submit" value="更改"/>
               </form>
      </body>
    </html>
    复制代码

    当表单提交的时候,进入/springweb/test/update,参数中的user来自@ModelAttribute("MyUser"),页面传过来的age属性覆盖原有的user.age

    所以结果如下:User [name=winclpt, sex=男, age=334]

    三、ModelAttribute和RequestMapping同时作用在一个方法

    复制代码
    @Controller
    @RequestMapping("test")
    public class TestController {
        @RequestMapping("winclpt")
        @ModelAttribute
        public String doTest(){
            return "winclpt";
    }
    复制代码

    这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求"/test/winclpt"转换为逻辑视图/test/winclpt.jsp

     
    分类: Spring
     
     
    « 上一篇:多数据源事物管理浅谈
    » 下一篇:@SessionAttribute使用详解
  • 相关阅读:
    redis 内存管理与数据淘汰机制(转载)
    Memcached特性及优缺点
    二叉树深度优先遍历和广度优先遍历
    电商 秒杀系统 设计思路和实现方法(转载)
    6种负载均衡算法
    解决like '%字符串%'时索引不被使用的方法
    哪些情况下索引会失效?
    PreferenceActivity详解
    sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
    单点登录原理与简单实现
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/10169597.html
Copyright © 2020-2023  润新知