1.作用
该注解是在SpringMVC4.3版本后新加入的。它可以修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法之前执行。它可以修饰 没有返回值的方法,也可以修饰没有返回值的方法。它修饰参数,获取指定 的数据给参数赋值。
当表单提交的不是完整的实体类型数据时,保证没有提交数据的 字段使用数据库对象原来的数据。
例如:我们在编辑一个用户时,用户有一个创建信息的字段,该字段的值是不 允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段 的内容设置为null。此时就可以使用此注解解决问题。
2.属性
value:用于获取数据的key。可以是POJO属性的名称,也可以是Map结构的key
3.示例
定义POJO
public class Student {
private String username;
private String password;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
}
定义表单
<form action="demo1/showUser" method="post">
姓名: <input type="text" name="username"><br>
年龄: <input type="text" name="age"><br>
<input type="submit" value="保存">
</form>
这个表单中只提交了两个字段,还有password字段没有提交
定义控制器方法(ModelAttribute注解修饰的方法带返回值)
@ModelAttribute
public Student showModel(String username,Integer age){
System.out.println("用户名:" + username + "年龄" + age);
Student student = new Student();
student.setUsername(username);
student.setAge(18);
//模拟根据用户名查询从数据表查询到了一个用户信息
student.setPassword("admin");
System.out.println("showModel方法执行了.....");
return student;
}
@RequestMapping("showUser")
public String showUser(Student student){
System.out.println("showUser方法执行了.....");
System.out.println(student);
return "success";
}
最终输出的User有password的值
定义控制器方法(ModelAttribute注解修饰的方法也可以不带返回值)
@ModelAttribute
public void showModel(String username, Integer age, Map<String, Object> map) {
System.out.println("用户名:" + username + "年龄" + age);
Student student = new Student();
student.setUsername(username);
student.setAge(18);
student.setPassword("admin"); // 模拟根据用户名查询从数据表查询到用户信息
System.out.println("showModel方法执行了.....");
map.put("student", student);
}
@RequestMapping("showUser")
public String showUser(@ModelAttribute("student") Student student) {
System.out.println("showUser方法执行了.....");
System.out.println(student);
return "success";
}
效果也是一样的