亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

我使用@ModelAttribute注解沒有達到效果,如下是代碼,老師幫我看一下

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


正在回答

2 回答

?/**

?????*?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);

????????}

????}

這樣不知道可以不可以....

0 回復 有任何疑惑可以回復我~
#1

坐著竹筏漂流 提問者

效果應該都差不多,其實這個問題已經解決了!
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);
??????}
?}


1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

我使用@ModelAttribute注解沒有達到效果,如下是代碼,老師幫我看一下

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號