• springmvc之使用ModelAttribute避免不允许被修改的值更新时为空


    我们在更新数据时,有的数据是不能够被修改的。假设User有三个字段,username,age,password。我们在前端传过来的数据为username和age,不能修改password,一般情况下,在后端都会新建一个user对象,使用该user对象对数据库进行更新操作。r那么我们直接进行更新操作,会导致密码变为空。

    解决方案有以下两种:

    (1)将所需的password用隐藏域传过来。但是这种做法当有很多不必修改的字段时很麻烦。

    (2)取出数据库中的password字段,重新为新建的user对象的password赋上值,这种操作也很麻烦。

    (3)使用ModelAttribute注解,不新建一个user对象,而是在原有的基础上进行更新,就可以既更新字段,又可以保留不必更新的字段。

    Person.java

    package com.gong.springmvc.entities;
    
    public class Person {
        private Integer id;
        private String username;
        private Integer age;
        private String password;
        
        public Person(Integer id, String username, Integer age, String password) {
            super();
            this.id = id;
            this.username = username;
            this.age = age;
            this.password = password;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
            return "Person [id=" + id + ", username=" + username + ", age=" + age + ", password=" + password + "]";
        }
        
        
    }

    SpringmvcTest.java

    @RequestMapping("/springmvc")
    @Controller
    public class SpringmvcTest {
        private static final String SUCCESS = "success";
        
        @ModelAttribute
        public void getPerson(@RequestParam(value="id",required=false) Integer id,
                Map<String,Object> map) {
            if(id != null) {
                Person person = new Person(1,"jack",18,"123456");
                System.out.println("模拟的数据库中的数据"+person);
                map.put("person", person);
            }
        }
        
        @RequestMapping(value="/testModelAttribute")
        public String testModelAttribute(Person person) {
            System.out.println(person);
            return SUCCESS;
        }
    }

    index.jsp

        <form action="springmvc/testModelAttribute" method="POST"><br>
            <input type="hidden" name="id" value="1"><br>
            <span>username:</span><input type="text" name="username" value="tom"><br>
            <span>age:</span><input type="text" name="age" value="20"><br>
            <input type="submit" value="submit"><br>
        </form>

    success.jsp

      <p>Success</p>

    启动服务器之后:

    点击提交,在控制台可以看到:

     我们可以直接将不必修改的数据进行赋值。

    需要注意的是:被@ModelAttribute标注的方法会在每个目标方法执行之前被springmvc所调用。

    运行流程:

    (1)执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放到Map中;

    (2)springmvc从Map中取出Person对象,并把表单的请求参数赋给该Person对象的对应属性;

    (3)springmvc把上述对象传入目标方法的参数;

  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12179451.html
Copyright © 2020-2023  润新知