昨天晚上俺想到有一個功能沒做,就想做一下!由於這個功能以前做過,很快就寫出來了,於是就部署,debug tomcat!但是在測試的時候,卻總是報No result defined for action異常,檢查了一個小時,而且把以前寫的代碼夜拿出來對照,還是沒有發現錯誤原因,只能放棄!今天早上起床就開始上Google搜這個,雖然網 上很多這樣的錯誤,但是看了好多都沒能解決這個問題,所以就按照網上的帖子先加了一個result中name為input的結果:
,還在error.jsp中加了一個
代 碼,由於對struts2掌握的也不太好,從debug的stacktrace中也沒看出什么,所以只能繼續上Google搜,然后再在自己的代碼中修修 補補,發現按要執行的manage/store/storeType_online(使用了通配符)中在StoreAction中的online方法竟然 沒只能,而是執行的該類的另一個方法
由於沒有傳遞storeid這個參數,就報了錯誤,所以俺把上述方法注釋掉了,這個時候再做測試,進入了error.jsp頁面,從堆棧中沒看出啥問題。又到網上以“struts2 方法沒執行”搜,在
http://blog.csdn.net/gavin812428144/archive/2010/03/27/5422220.aspx頁面中看到了如下文字
,才知道INPUT的結果是沒有通過驗證的返回結果(基礎沒掌握好,就是浪費時間)。所以懷疑是form提交的數據沒有通過struts2默認的驗證,只能再上Google搜,找到了這個頁面
http://blog.csdn.net/yby0260/archive/2010/08/18/5822312.aspx:
,於是就將<s:fielderror/>加到error.jsp 頁面上,這才看到錯誤信息,原來是storelist.jsp中的一個隱藏input
的值驗證無效,所以看了一下以前的代碼發現沒有value="${currentPage}"屬性,所以去掉該屬性后,再測試,正常。終於解決了,不容易......
總結一下:遇到No result defined for action的問題的時候,首先看是不是validate的問題,在action中,設置斷點,看執行了沒有(注意,要使用debug,tomcat必須 以debug方式啟動,建議在開發的時候都是以debug方式啟動),再加一個INPUT的返回結果看看,在相應的頁面中輸出驗證信息。如果不是 validate的問題,再看頁面元素中有重命名時,但后台action類的對應的接收此同名參數的是變量而沒有寫成數組,也可能是路徑的問 題......
- <result name="input">/WEB-INF/page/error/error.jsp</result>
- <s:debug></s:debug>
- public String getStoreDetail() {
- store = storeService.find(storeid);
- return "storedetail";
- }
- 今天提交表單時發現action中的execute()方法沒有執行,但是validate()卻執行了,而且並沒有報任何錯,執行完之后,就直接退出了,程序並沒有進入execute()。
- 幾經調試,發現validate()返回的resultCode為INPUT,說明並沒有通過驗證。究竟是什么原因導致驗證不通過呢?!郁悶了半天,最后突然想起,我所提交的表單中有個type="file"的input,即我是准備上傳文件的,然而我忘了將form的enctype屬性改成"multipart/form-data"。貌似找到了問題,趕緊重試,結果果然如預料的,正是這個問題導致了表單提交失敗,execute()未被執行。
- 如果大家遇到類似問題,不妨看看你的form的enctype,希望此次經歷對大家有用。
- 當 我們在使用struts2自帶的驗證框架來驗證表單字段時,需要在頁面上顯示錯誤提示信息,一般我們是在頁面上添 加<s:fielderror/>標簽。而<s:fielderror/>會解析 成<ul><li><span>error message</span>< /li></ul>的形式,這樣一來錯誤信息的顯示就只能顯示在驗證字段的上方或者下面,而我們需要的往往是將錯誤信息顯示在驗證字段 的右邊。
- <input type="hidden" name="currentPage" value="${currentPage}"/>
總結一下:遇到No result defined for action的問題的時候,首先看是不是validate的問題,在action中,設置斷點,看執行了沒有(注意,要使用debug,tomcat必須 以debug方式啟動,建議在開發的時候都是以debug方式啟動),再加一個INPUT的返回結果看看,在相應的頁面中輸出驗證信息。如果不是 validate的問題,再看頁面元素中有重命名時,但后台action類的對應的接收此同名參數的是變量而沒有寫成數組,也可能是路徑的問 題......
我出現這個錯誤,仔細檢查發現是form表單的一個input的name屬性和action中的對應屬性不一致,大小寫問題導致的。
例子2:
我這個錯事validate的問題,驗證沒通過,所以action自動return “input”,然后我沒有定義<result name="input"></result>的頁面,所以報404