@ModelAttribute注解

  1. 需求:假设有一个user对象,通过表单提交后,修改时不能修改密码可以修改值,达到部分数据修改的目的
  2. 代码清单
    前台页面

    
    
    
    username:
    email:
    age:


    控制器

    /**
     /**
     * 1. 有 @ModelAttribute 注解标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用
     * 2. @ModelAttribute 注解也可以用来修饰目标方法 POJO 类型的入参, 其 value 属性值有如下作用:
     *  1). SpringMVC 会使用 value 属性值在 implicitModel 中查找对应的对象, 若存在则会直接传入到目标方法的入参中.
     *  2). SpringMVC 会以 value 为 key, POJO 类型的对象为 value, 存入到 request 中.
     * @param id
     * @param map
     */
     * @param id
     * @param map
     */
    @ModelAttribute
    public void getUser(@RequestParam(value="id",required=false) Integer id,
            Map map){
        if(id != null){
            //模拟从数据库中取出对象
            User user = new User(1, "Tom", "123", "[email protected]", 11);
            System.out.println("从数据库中获取一个对象: " + user);
    
            map.put("user", user);
        }
    }
    
    /**
     * 运行流程:
     *  1. 执行@ModelAttribute 注解修饰的方法: 从数据库中取出对象, 把对象放到了Map中, 键为: user
     *  2. SpringMVC 从 Map 中取出user对象, 并把表单的请求赋给该 User对象的对应属性
     *  3. SpringMVC 把上述对象传入目标方法的参数
     *  
     * 注意:
     *  在@ModelAttribute 修饰的方法中, 放入到 Map 时的键需要和目标方法入参类型的第一个字母小写的字符串一致!
     * @param user
     * @return
     */
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user) {
        System.out.println("修改: " + user);
        return SUCCESS;
    }