ModelAttribute注解

在方法定义上使用ModelAttribute注解,springMVC在调用目标方法前会逐个调用标准了ModelAttribute注解的方法。
在方法的参数前使用ModelAttribute注解,可以从隐含对象中隐含的模型数据中获取对象,再将请求参数绑定到参数中。

一.应用场景

修改学生信息,密码不改
Student类

package org.springmvc.entity;

public class Student {

    private String name;
    private String password;
    private int age;
    private String email;

    public Student() {
    }

    public Student(String name, String password, int age, String email) {
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", password=" + password + ", age=" + age + ", email=" + email + "]";
    }

}

修改学生信息:

<form action="testModelAttribute" method="post">
    name:<input type="test" name="name" value="zhangsan"/>          <br> 
    age:<input type="test" name="age" value="16" />
    <br>  
    email:<input type="test" name="email" value="asd@huawei.com" /> 
    <br> 
    <input type="submit" value="submit">
</form>

controller:

@RequestMapping("testModelAttribute")
    public String testModelAttribute(Student student){
        System.out.println(student);
        return "success";
    }

结果密码变成null

Student [name=zhangsan, password=null, age=12, email=asd@huawei.com]

二.ModelAttribute注解使用

    @ModelAttribute
    public void getStudent(Map<String, Object> map){
        // 模拟从数据库查询学生信息

        Student student = new Student("zhangsan","1233456",14,"asd@huawei.com");
        System.out.println("从数据库获得的student:" + student);
        map.put("student", student);
    }

    @RequestMapping("testModelAttribute")
    public String testModelAttribute(Student student){
        System.out.println("修改:"+student);
        return "success";
    }

结果:

从数据库获得的student:Student [name=zhangsan, password=123456, age=14, email=asd@huawei.com]
修改:Student [name=zhangsan, password=123456, age=16, email=asd@huawei.com]

上述例子运行流程:

  1. 执行ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放入到map中key为:student
  2. SpringMVC从map中取出student对象,并把表单的请求参数赋给该student对象的对应属性。
  3. SpringMVC把上述对象传入目标方法的参数。
    注意:目标方法的POJO类型参数没有使用@ModelAttribute注解修饰,则在ModelAttribute修饰的方法中,放入到map时的key值要和目标方法参数类型的第一个字母小写的字符串一致。目标方法有@ModelAttribute注解修饰则key为@ModelAttribute注解注解的value属性值
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值