好吧,坎坷的過程我就不說了,直接上結論:
在struts2中使用基于ognl的自動類型轉換時,Action中的對象屬性必須同時添加get/set方法。
例如:
客戶端表單:
Action代碼:
public class RegistAction extends ActionSupport { private User user; @Override public String execute() throws Exception { System.out.println("age: " + user.getAge()); return SUCCESS; } public void setUser(User user) { System.out.println("in setUser : " + user.getAge()); this.user = user; } public User getUser() { // 必須添加get方法,否則在execute方法中無法獲得user對象的任何屬性。 return user; }}
一開始我認為只要set方法就行了,想當然的只寫了set方法。我認為當struts獲取到表單參數組裝成一個user對象以后,會通過set方法把組裝好的user對象設置進Action。
但是最后我在set方法中打印傳遞進來的user對象值時發(fā)現所有的屬性都是默認值,當然在execute方法中也無法獲取user的值。
經過這個bug我猜測(僅僅是猜測,沒有看源代碼,如果哪位大神知道請告訴我)調用set方法是僅僅獲取的是個空對象,當在execute方法中直接調用user屬性值時會再去調用get方法獲取 有值 的user對象。
郁悶了將近一天,就剩沒有調試源代碼了(因為myeclipse中綁定sun.reflect包源代碼時出現點問題,所以沒有調試成功,幸好沒有調試,否則更暈!!!)。
望小伙伴們不要再犯我這樣的錯誤
新聞熱點
疑難解答