前台jsp頁面提交的數據與對應的action屬性類型不一致
例如:前台頁面有多個相同的input 輸入框-
1 <input onclick="$('[name=privilegeIds]').attr('checked',this.checked)" type="checkbox" name="privilegeIds"></input> 2 <!--下面的是相同的checkbox 跟上面的名稱一致--> 3 4 <ul id="root"> 5 <%-- 第一級 --%> 6 <s:iterator value="#privilegelist"> 7 <li> 8 <input type="checkbox" name="privilegeIds" value="${id}" id="cb_${id}" <s:property value="%{id in privilegeIds ? 'checked' : ''}"/> > 9 <label for="cb_${id}"><span class="folder">${name}</span></label> 10 <ul> 11 <%-- 第二級 --%> 12 <s:iterator value="children"> 13 <li> 14 <input type="checkbox" name="privilegeIds" value="${id}" id="cb_${id}" <s:property value="%{id in privilegeIds ? 'checked' : ''}"/> > 15 <label for="cb_${id}"><span class="folder">${name}</span></label> 16 <ul> 17 <%-- 第三級 --%> 18 <s:iterator value="children"> 19 <li> 20 <input type="checkbox" name="privilegeIds" value="${id}" id="cb_${id}" <s:property value="%{id in privilegeIds ? 'checked' : ''}"/> > 21 <label for="cb_${id}"><span class="folder">${name}</span></label> 22 </li> 23 </s:iterator> 24 </ul> 25 </li> 26 </s:iterator> 27 </ul> 28 </li> 29 </s:iterator> 30 </ul> 31 <!--只需要看input標簽即可-->
這段代碼我想說明的是 如果你提交的同名(name屬性名稱相同的話,那么他們的value值的類型必須一致且最好與你action里定義的屬性類型一致)否則會出現上面異常,且這個異常非常的不容易發現。
避免錯失:定義前台表單元素數據時如果,例如:你的全選按鈕只是一個事件功能並不需要向后台action提交數據的話,就不要設置該元素的 name屬性了,即只要是向后台提交數據的表單元素都可以不設置name屬性,避免因此發生不必要的異常。 - 這是遇到這個問題時看到的比較准確的分析也貼在這里
今天在編程的時候,我遇到了No result defined for action and result input的錯誤,這個錯誤想必大家都有遇到過吧,我今天發了很長時間弄這個錯誤,我以為我的Action函數出錯了想調試,但是程序就是不進入斷點,上網查資料,有的說路徑錯誤啦,然后我找我的路徑錯誤,搞了半天還是沒發現有路徑問題。然后我給我的屬性的get方法都弄上了斷點,我發現了問題,現在跟大家分享。
這個錯誤就是說沒有為返回的input定義,可是有時候我們不一定要這個鬼東西,然而在Action中出錯的話,默認就返回了這個input了,這時,我們在struts的<result>中定義的話,就出現No result defined for action and result input的錯誤了。
引起這個錯誤的原因是很多的,路徑錯誤也是其中的一種,我這里的問題是,我的頁面上的類型和我定義的屬性的類型不一致,我的屬性是int型的,但是在頁面上輸出的時候加了一個逗號,用了分割千位的,結果就出現了這個問題了。這個問題好像在strtus2.1以上版本才出現, 這個問題的上面的解決方案已經把原因說的差不多了,在實際應用中,我估計大部分情況應該都是在action里面定義了int或者別的什么類型的變量,然后指望struts的自動填裝把post來的數據轉換,這時容易出現轉換失敗,從而導致了這個錯誤,所以查這個錯誤,可以利用ff的httpfox來查看實際post的參數是什么,然后和action中對應的屬性對比,看那個會出現轉換錯誤。
淡然另一種就是上面說的在所有的set 中加入斷點,總能看到是哪個方法執行失敗的。
另外還有種就是頁面提交了同一個名字的參數多個,比如
寫道username 123
username 123
permissions 123
info 31234頁面沖提交了了兩個username ,而我的后台卻只寫了一個String username,這樣同樣會出錯,這個是利用httpfox看的,
其實最好的是action中的和post相對應屬性都設置成為String類型,省事,也不會再出現這個錯誤了,然后在execute中執行轉換。這樣也方便差錯