SpringMVC注解之ModelAttribute
作用
可修饰方法和参数。
修饰方法
优先执行。
有没有返回值都可修饰。
测试案例
controller
@RequestMapping("/testModelAttribute")
public String testModelAttribute(){
System.out.println("ModelAttribute执行。。。。。。");
System.out.println(" = " );
return "success";
}
@ModelAttribute
public void showUser(){
System.out.println("showUser执行了。。。。。。");
}
jsp
<form action="anno/testModelAttribute" method="post">
名字:<input type="text" name="uname"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交"><br>
</form>
测试结果
showUser执行了。。。。。。
ModelAttribute执行。。。。。。
应用场景
User类
public class User implements Serializable {
private String uname;
private Integer age;
private Date date;
}
表单提交的数据只有uname , age两个属性。
date属性 为 null
user = User{uname='SAg', age=23, date=null}
则可以提前为date属性赋值为数据库中的原来的值。
方法一(有返回)
测试案例
controller
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("ModelAttribute执行。。。。。。");
System.out.println("user = " + user.toString() );
return "success";
}
@ModelAttribute
public User showUser(String uname){
System.out.println("showUser执行了。。。。。。");
//模拟通过uname查询数据库
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
return user;
}
jsp
<form action="anno/testModelAttribute" method="post">
名字:<input type="text" name="uname"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交"><br>
</form>
测试结果
user = User{uname='heh', age=23, date=Wed Feb 24 13:16:45 CST 2021}
流程分析:
(1)showUser方法先拿到form表单传进来的数据。
(2)showUser方法将数据库查到的数据封装到User中,并返回User对象。
(3)testModelAttribute方法的参数为showUser方法的返回值,根据表单提交的数据对user对象的uname,age进行覆盖。
方法二(无返回)
测试案例
controller
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
System.out.println("ModelAttribute执行。。。。。。");
System.out.println("user = " + user.toString() );
return "success";
}
@ModelAttribute
public void showUser(String uname, Map<String,User> map){
System.out.println("showUser执行了。。。。。。");
//模拟通过uname查询数据库
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
map.put("abc",user);
}
jsp
<form action="anno/testModelAttribute" method="post">
名字:<input type="text" name="uname"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交"><br>
</form>
测试结果
user = User{uname='heh', age=23, date=Wed Feb 24 13:37:09 CST 2021}
流程分析:
(1)showUser方法把User对象存进Map集合。
(2)testModelAttribute方法再根据key值取出User对象。
修饰参数
获取指定数据给参数赋值
属性
1.value:用于获取数据的key(属性名称/map结构的key)