SpringMVC(四) ModelAttribute

ModelAttribute

1.在方法定义上使用 @ModelAttribute 注解:Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。

2.在方法的入参前使用 @ModelAttribute 注解:

  • 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
  • 将方法入参对象添加到模型中

    /*
     * 有 @ModelAttribute 标记的方法,会在每个目标方法之前被 Spring MVC 调用
     */
    @ModelAttribute
    public void getUser(@RequestParam(value="id",required=false) Integer id,Map<String,Object>map) {
        if(id != null) {
            //模拟从数据库中取出数据
            User user = new User(1, "Tom", "123456", 22);
            System.out.println("从数据库中获取的对象 : " + user);

            map.put("user", user);
        }
    }
    /*
     * 运行流程:
     *  1.执行 @ModelAttribute 注解修饰的方法:从数据库中取出对象,将对象放到 Map 中。键为 user
     *  2.Spring MVC 从 Map 中取出 User 对象,并把表单的请求参数赋给该 User 对象的属性中。
     *  3.Spring MVC 将上述对象传入目标方法的参数。
     * 
     * 注意:在 @ModelAttribute 注解修饰的方法中,放入到 Map 时的键要和目标方法参数类型第一个字母小写的字符串一致。
     */
    @RequestMapping("testModelAttribute")
    public String testModelAttribute(User user) {
        System.out.println("修改:" + user);
        return SUCCESS;
    }

@ModelAttribute 注解修饰的方法中,map.put(“user”,user) 中键 “user”,应该为 testModelAttribute(User user) 中 User 首字母小写

运行流程:

1.表单提交后,先执行 @ModelAttribute 注解修饰的方法 getUser(),把 user 放到 map 中。
2.SpringMVC 从 map 中取出 User 对象,然后把表单的请求参数附给 User 对象的属性值。
3.Spring MVC 将上述对象传入目标方法 testModelAttribute 的参数。

用到此技术的地方:

  当我们在对数据库某条记录修改时,以 User 为例,我们需要修改数据库中一条 User 记录,但是其 name 和 id 属性不能被修改,这时我们从表单中获取的数据是不包含 name 和 id 属性的,如果我们不使用 @ModelAttribute,那么在目标方法中获取到的 user 中 name 和 id 属性就为 null,如果此时写到数据库中就会出现问题。使用 @ModelAttribute 提前将原数据 user 取出来,再将表单提交的信息填充到此时的 user 中,这样就解决了该问题。

示意图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值