@ModelAttribute注解的作用

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

获取的pass为null

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

实现代码如下:

 

 @ModelAttribute
      public void getUsers(@RequestParam(value="name",required=false) String name,Map<String, Object> map){
          if(name!=null){
              System.out.println("调用ModelAttribute");
              //模拟从数据库中获取的对象。
              User users = new User("cjh","123","123@qq.com","China");
              System.out.println("从数据库中获取一个对象"+users);
              map.put("user",users);
          }
     }


     @RequestMapping("/getInfo")
     public String getServletAPI(User user){
         String viewName = "hello";
         System.out.println("修改:"+user);
         return viewName;
     }

@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时的键要和目标方法入参类型的参数名一致。

 

最终效果:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值