關於在Struts2的Action中使用domain模型接收參數的問題


最近在搭建一個最新的ssh2框架,今天在調試的時候,發現了一個以前一直沒有注意過的問題,我在Action中使用域模型的方式去接收jsp畫面中的參數的時候,發現參數總是接收不完,頭一次遇到這種問題,現在把解決辦法寫下來

Jsp中的代碼如下:

1 <form action="TestAction" method="post">
2     用戶名:<input type="text" name="user.userName"><br/>
3     密    碼:<input type="text" name="user.userPwd"><br/>
4     <input type="submit" value="提交">
5 </form>

然后我在Action中定義一個user屬性,user中包含了userNameuserPwd屬性,代碼如下:

1 /**
2  * 定義UserInfo的域模型,用於接收Form表單中的參數
3  */
4 private UserInfo user;
5 public void setUser(UserInfo user) {
6     this.user = user;
7 }

 

因為我在Action只寫了setUser方法,沒有寫相應的getUser方法,所以在接收參數的時候就出現了如下問題

 

在調試過程中發現,user域模型只接收到了一個參數,userName的卻為空了

使用了Struts2框架那么久了,還是頭一次遇到這個問題,百思不得其解。后來上網查了原因發現,原來是少了對應的getUser方法才導致出現了這個問題,因為struts2對這種混合類型的注入不是一次性全部注入其屬性,而是每注入一次下一次就在前台獲取obj然后再注入。我們編程時習慣getter/setter 都寫,因此很少碰到這個問題。 

Action中加上對應的getUser方法,代碼如下:

1 private UserInfo user;
2 public UserInfo getUser() { 3 return user; 4 } 5 public void setUser(UserInfo user) {
6     this.user = user;
7 }

再次進行接收參數測試

這次就可以把JSP中填寫的用戶名和密碼都獲取下來了,如下圖所示:

總結:Struts2中使用domain模型接收參數時,一定要寫上該模型對應的getset方法,否則就會出現參數接收不完的情況。

Action中使用域模型接收參數的正確寫法范例:

 1 /**
 2  * 定義UserInfo的域模型,用於接收Form表單中的參數
 3  */
 4 private UserInfo user;
 5 /**
 6  * 對應的get方法
 7  */
 8 public UserInfo getUser() {
 9     return user;
10 }
11 /**
12  * 對應的set方法
13  */
14 public void setUser(UserInfo user) {
15     this.user = user;
16 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM