(一)应用场景:用户只提交并更新实体Entity内的部分信息,其它信息未更改,此时应该从数据库中查询原对象的所有值,并在提交的基础上,对源对象进行修改后保存。
(二)实践:
1.定义User
public class User {
private String id;
private String name;
public User() {
super();
}
public User(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
2.定义Controller
@Controller
public class UserDao {
@ModelAttribute
public void PreSave01(@RequestParam String id,Map<String, Object> map) {
System.out.println("PreSave01");
map.put("info","这是根据user的 : ["+id+" ] 信息查到的userInfo! ");
}
@RequestMapping(value="/test01")
public String SaveUser01(@ModelAttribute("info")String info) {
System.out.println("SaveUser01 test01 info=【"+info+"】");
return "success";
}
@ModelAttribute("userInfo")
public User PreSave02(@RequestParam String id) {
User user = new User(id,"Lilith");
return user;
}
@RequestMapping(value="/test02")
public String SaveUser02(@ModelAttribute("userInfo")User info) {
System.out.println("SaveUser02 test02 userInfo=【"+info+"】");
return "success";
}
@ModelAttribute("userInfo")
public void PreSave03(@RequestParam String id, Model model) {
User user = new User(id,"Lilith");
model.addAttribute(user);
}
@RequestMapping(value="/test03")
public String SaveUser03(@ModelAttribute("userInfo")User info) {
System.out.println("SaveUser03 test03 userInfo=【"+info+"】");
return "success";
}
private Object m1;
private Object m2;
@ModelAttribute
public void PreSave04(@RequestParam String id, Map<String,Object> map) {
User user = new User(id,"Lilith");
m1=map;
map.put("uInfo", user);
}
@RequestMapping(value="/test04")
public String SaveUser04(@ModelAttribute("uInfo")User info,Model model) {
System.out.println("SaveUser04 test03 userInfo=【"+info+"】");
m2=model;
System.out.println("m1====m2?"+(m1==m2));
return "success";
}
}
3.index页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="test01?id=10001"> 测试ModelAttribute </a><br/>
<a href="test02?id=10002"> 测试 ModelAttribute("xxx")形式 </a><br/>
<a href="test03?id=10003"> 测试 传入Model </a><br/>
<a href="test04?id=10004"> 测试 ModelEq </a><br/>
</body>
</html>