zoukankan      html  css  js  c++  java
  • @ModelAttribute注解的作用

    问题描述:当我们使用表单传值得时候,如果定义了,nameaddressage。等属性,那么通过表单传过去的值就只有这3个属性,但是我们需要的namepassaddressage等四个属性。那么在提交表单并赋值的时候就会出现,未得到的值为null的情况。如下图:

    获取的passnull

    那么我们需要用@ModelAttribute注解来解决他:

    实现代码如下:

     1 @ModelAttribute
     2     public void getUsers(@RequestParam(value="name",required=false) String name,Map<String, Object> map){
     3         if(name!=null){
     4             System.out.println("调用ModelAttribute");
     5             //模拟从数据库中获取的对象。
     6             User users = new User("cjh","123","123@qq.com","China");
     7             System.out.println("从数据库中获取一个对象"+users);
     8             map.put("user",users);
     9         }
    10     }
    11     @RequestMapping("/getInfo")
    12     public String getServletAPI(User user){
    13         String viewName = "hello";
    14         System.out.println("修改:"+user);
    15         return viewName;
    16     }

    @ModelAttribute注解的方法,在这个控制器中不管其他任何一个方法被调用,都会执行。

    以上代码的运行流程为

    1.首先执行@ModelAttribute注解修饰的方法,从数据库中查找出对应要修改的对象,把值放在map键值对中,key应该和处理请求的方法传入的参数名一样,如:此处定义的传入参数名为user,那么map.put(“user”,值(从数据库中查询的对象))。这个Map需要定义在方法入参的地方(代码如上)。

    2.Spring MVC会从Map中找出user对象,并把表单请求参数赋值给该user对象,只有表单定义了的属性才会被替换,没定义的为null,不改变。所以要求@ModelAttribute修饰的方法中定义的key的名称要和控制器方法(@RequestMapping()修饰的方法)中入参的名称要一致。否则没效果。

    3.Spring MVC 把上述对象传入目标方法的参数。

    注意:在@ModelAttribute 修饰的方法中,放入到map时的键要和目标方法入参类型的参数名一致。

    最终效果:

  • 相关阅读:
    前端chrome浏览器调试总结
    this指南——绑定了谁?
    轮播图终极版
    一个后台项目的总结
    h5 websocket 断开重新连接
    ios手机键盘拉起之后页面不会回退的问题
    promise 的串行执行
    js中对小数的计算
    对问卷项目的优化
    禁止eslint对指定代码检测
  • 原文地址:https://www.cnblogs.com/caijh/p/6413998.html
Copyright © 2011-2022 走看看