關於在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中包含了userName和userPwd屬性,代碼如下:

複製代碼
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模型接收參數時,一定要寫上該模型對應的get和set方法,否則就會出現參數接收不完的情況。

在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 }
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章