JSP頁面代碼:
<form?action="springmvc/ModelAttribute"?method="POST">
????<input?type="hidden"?name="id"?value="1"/>
????age:<input?type="text"?name="age"?value="22"/><br><br>
????username:<input?type="text"?name="username"?value="Tom"/><br><br>
????email:<input?type="text"?name="email"?value="[email protected]"/><br><br>
????<input?type="submit"?value="Test?ModelAttribute">
</form>
?
控制器層代碼:
@Controller
@RequestMapping("/springmvc")
//@SessionAttributes(value={"user"},types=String.class)
public?class?SpringMVCTest02?{
????private?static?final?String?SUCCESS?="success";
?????
????/**
?????*?18.測試@ModelAttribute注解
?????*?@param?user
?????*?@return
?????*/
????@RequestMapping(value="/ModelAttribute",method=RequestMethod.POST)
????public?String?test18(UserBean?user)?{
????????System.out.println("模擬需要進行修改的user對象:"+user);
????????return?SUCCESS;
????}
?????
????@ModelAttribute
????public?void?getUser(@RequestParam(value="id",required=false)?Long?id,
????????????????????????Map<String,?Object>?map)?{
????????if?(id?!=?null)?{
????????????UserBean?user?=?new?UserBean();
????????????user.setAge((short)21);
????????????user.setId(new?Long(1));
????????????user.setUsername("Jerry");
????????????user.setPassword("123456");
????????????user.setEmail("[email protected]");
????????????System.out.println("模擬從數據庫獲取的User對象:"+user);
????????????map.put("user",?user);
????????}
????}
}
?
這是控制臺輸出:
?
模擬從數據庫獲取的User對象:UserBean?[id=1,?age=21,[email protected],?username=Jerry,?password=123456,?address=null]
模擬需要進行修改的user對象:UserBean?[id=1,?age=22,[email protected],?username=Tom,?password=null,?address=null]
?
需求是把獲取到password賦值給為null的password
2018-01-14
?/**
?????*?18.測試@ModelAttribute注解
?????*?@param?user
?????*?@return
?????*/
????@RequestMapping(value="/ModelAttribute",method=RequestMethod.POST)
????public?String?test18(UserBean?user,Map<String,Object> map)?{
????????String pwd=map.get("user1").getPassword();
????????user.setPassword(pwd);
????????System.out.println("模擬需要進行修改的user對象:"+user);
????????return?SUCCESS;
????}
??????
????@ModelAttribute
????public?void?getUser(@RequestParam(value="id",required=false)?Long?id,
????????????????????????Map<String,?Object>?map)?{
????????if?(id?!=?null)?{
????????????UserBean?user?=?new?UserBean();
????????????user.setAge((short)21);
????????????user.setId(new?Long(1));
????????????user.setUsername("Jerry");
????????????user.setPassword("123456");
????????????user.setEmail("[email protected]");
????????????System.out.println("模擬從數據庫獲取的User對象:"+user);
????????????map.put("user1",?user);
????????}
????}
這樣不知道可以不可以....
2018-01-18
/** ??*?18.測試@ModelAttribute注解: ??*?1.運行流程: ??*?①?ModelAttribute注解修飾的方法從數據庫中獲取到對象的相關數據,把數據放入到Map中,鍵為:userBean. ??*?②?SpringMVC從Map中取出UserBean對象,并把表單參數賦給該UserBean對象對應的屬性 ??*?③?SpringMVC把上述對象傳給目標方法的入參 ??*? ??*?注意:@ModelAttribute修飾的方法中,放入到Map中的鍵和目標方法入參類型的第一個字母小寫的字符串 ??*? ??*?2.源碼分析流程: ??*?(1)?先調用被@ModelAttribute注解修飾的方法——把該方法中Map中的數據implicitModel中 ??*?(2)?解析請求處理器的目標參數,實際上該目標參數來自于WebDataBinder對象的target屬性 ??*? ???①?創建WebDataBinder對象: ??*? ??? ?>?確定objectName屬性:如果傳入的attrName的屬性值為"",則objectName為類名的第一個字母小寫; ??*? ????????如果目標方法的POJO類參數使用@ModelAttribute來修飾,則attrName值為@ModelAttribute注解 ??*? ????????的value屬性的屬性值 ??*? ?>?確定target屬性——在implicitModel中查找attrName對應的屬性值:如果存在就放行;如果不存在則驗證 ??*? ????????當前控制器是否被@SessionAttributes修飾,如果是,則嘗試從Session中獲取attrName對應的屬性值, ??*? ????????如果Session中沒有對應的屬性就會拋出異常;如果當前控制器沒有被@SessionAttributes修飾,或 ??*? ????????在@SessionAttributes中沒有使用value值指定的key和attrName匹配,則通過反射創建一個POJO ??*? ???②?SpringMVC把表單請求的參數賦給了WebDataBinder的target對應的屬性 ??*? ???③?SpringMVC會把attrName和target賦給implicitModel ??*? ???④?把WebDataBinder的target作為參數傳給目標方法的入參 ??*? ??*?3.SpringMVC確定目標方法POJO入參的過程 ??*?(1)確定一個key:在implicitModel中查找key對應的對象, ??*?@param?user ??*?@return ??*/ ??@RequestMapping(value="/ModelAttribute",method=RequestMethod.POST) ??public?String?test18(@ModelAttribute("user")?UserBean?user)?{ ??????System.out.println("模擬需要進行修改的user對象:"+user); ??????return?SUCCESS; ??} ??@ModelAttribute ??public?void?getUser(@RequestParam(value="id",required=false)?Long?id, ??????????Map<String,?Object>?map)?{ ??????if?(id?!=?null)?{ ??????????UserBean?user?=?new?UserBean(); ??????????user.setAge((short)21); ??????????user.setId(new?Long(1)); ??????????user.setUsername("Jerry"); ??????????user.setPassword("123456"); ??????????user.setEmail("[email protected]"); ?????????? ??????????System.out.println("模擬從數據庫獲取的User對象:"+user); ??????????map.put("user",?user); ??????} ?}