天天看点

SpringMVC-ModelAttribute注解

使用说明

  • 作用: 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参 数。 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可 以修饰没有返回值的方法,也可以修饰有具体返回值的方法。出现在参数上, 获取指定的数据给参数赋值。
  • 属性: value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
  • 应用场景: 当表单提交数据不是完整的实体类数据时,保证没有提交数据的字 段使用数据库对象原来的数据。
  • 例如: 我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允 许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段 内容置为 null,此时就可以使用此注解解决问题。

使用示例1

基于 POJO 属性的基本使用(ModelAttribute 修饰方法带返回值) :模拟前端不传密码时,采用数据库原来的密码

jps 代码

<!-- 修改用户信息 -->
<form action="account/updateUser" method="post">
    <input type="hidden" name="id" value="2">
    用户名称:<input type="text" name="username" ><br/>
    用户年龄:<input type="text" name="age" ><br/>
    <input type="submit" value="保存">
</form>
           

控制器代码:

@ModelAttribute("user")
    //此参数必须是具体id,不能从user对象中获取
    public User showModel(String id) {
        //模拟去数据库查询
        User user1 = findUserById(id);
        System.out.println("执行了 showModel 方法"+user1);
        return user1;
    }

    private User findUserById(String id) {
        User user = new User();
        user.setId(id);
        user.setUsername("林浩");
        user.setAge(19);
        user.setPassword("123456");
        return user;
    }

    @RequestMapping("/updateUser")
    public String updateUser111(@ModelAttribute("user") User user) {
        System.out.println("控制器中处理请求的方法:修改用户:" + user);
        return "success";
    }
           

运行结果

SpringMVC-ModelAttribute注解

使用示例2

基于 Map 的应用场景(ModelAttribute 修饰方法不带返回值):模拟前端不传密码时,采用数据库原来的密码

jsp与前面一样

<!-- 修改用户信息 -->
<form action="account/updateUser" method="post">
    <input type="hidden" name="id" value="2">
    用户名称:<input type="text" name="username" ><br/>
    用户年龄:<input type="text" name="age" ><br/>
    <input type="submit" value="保存">
</form>
           

控制器代码

@ModelAttribute("user")
    public void showModel(String id, Map<String,User> map) {
        //模拟去数据库查询
        User user1 = findUserById(id);
        System.out.println("执行了 showModel 方法"+user1);
        map.put("user",user1);
    }

    private User findUserById(String id) {
        User user = new User();
        user.setId(id);
        user.setUsername("林浩");
        user.setAge(19);
        user.setPassword("123456");
        return user;
    }

    @RequestMapping("/updateUser")
    public String updateUser111(@ModelAttribute("user") User user) {
        System.out.println("控制器中处理请求的方法:修改用户:" + user);
        return "success";
    }
           

运行结果

SpringMVC-ModelAttribute注解

继续阅读