使用說明
- 作用: 該注解是 SpringMVC4.3 版本以後新加入的。它可以用于修飾方法和參 數。 出現在方法上,表示目前方法會在控制器的方法執行之前,先執行。它可 以修飾沒有傳回值的方法,也可以修飾有具體傳回值的方法。出現在參數上, 擷取指定的資料給參數指派。
- 屬性: value:用于擷取資料的 key。key 可以是 POJO 的屬性名稱,也可以是 map 結構的 key。
- 應用場景: 當表單送出資料不是完整的實體類資料時,保證沒有送出資料的字 段使用資料庫對象原來的資料。
- 例如: 我們在編輯一個使用者時,使用者有一個建立資訊字段,該字段的值是不允 許被修改的。在送出表單資料是肯定沒有此字段的内容,一旦更新會把該字段 内容置為 null,此時就可以使用此注解解決問題。
使用示例1
基于 POJO 屬性的基本使用(ModelAttribute 修飾方法帶傳回值) :模拟前端不傳密碼時,采用資料庫原來的密碼
jps 代碼
<!-- 修改使用者資訊 -->
<form action="account/updateUser" method="post">
<input type="hidden" name="id" value="2">
使用者名稱:<input type="text" name="username" ><br/>
使用者年齡:<input type="text" name="age" ><br/>
<input type="submit" value="儲存">
</form>
控制器代碼:
@ModelAttribute("user")
//此參數必須是具體id,不能從user對象中擷取
public User showModel(String id) {
//模拟去資料庫查詢
User user1 = findUserById(id);
System.out.println("執行了 showModel 方法"+user1);
return user1;
}
private User findUserById(String id) {
User user = new User();
user.setId(id);
user.setUsername("林浩");
user.setAge(19);
user.setPassword("123456");
return user;
}
@RequestMapping("/updateUser")
public String updateUser111(@ModelAttribute("user") User user) {
System.out.println("控制器中處理請求的方法:修改使用者:" + user);
return "success";
}
運作結果
使用示例2
基于 Map 的應用場景(ModelAttribute 修飾方法不帶傳回值):模拟前端不傳密碼時,采用資料庫原來的密碼
jsp與前面一樣
<!-- 修改使用者資訊 -->
<form action="account/updateUser" method="post">
<input type="hidden" name="id" value="2">
使用者名稱:<input type="text" name="username" ><br/>
使用者年齡:<input type="text" name="age" ><br/>
<input type="submit" value="儲存">
</form>
控制器代碼
@ModelAttribute("user")
public void showModel(String id, Map<String,User> map) {
//模拟去資料庫查詢
User user1 = findUserById(id);
System.out.println("執行了 showModel 方法"+user1);
map.put("user",user1);
}
private User findUserById(String id) {
User user = new User();
user.setId(id);
user.setUsername("林浩");
user.setAge(19);
user.setPassword("123456");
return user;
}
@RequestMapping("/updateUser")
public String updateUser111(@ModelAttribute("user") User user) {
System.out.println("控制器中處理請求的方法:修改使用者:" + user);
return "success";
}
運作結果