有個空間

          有個標題

          Struts 異常 IllegalArgumentException

          最近小玩Struts。改造項目。

          在測試時兩次發現
          javax.servlet.ServletException: BeanUtils.populate
          java.lang.IllegalArgumentException: argument type mismatch異常。

          第一次,是由于在Form中定義的是String[] somethingID數組類型,而在jsp中定義的是
          <html:hidden property="somethingID"/>,導致類型不匹配,從而出現異常。

          第二次出現,原因比較隱蔽。容我慢慢道來。
          兩個畫面,SomeList.jsp 和Some.jsp,分別對應SomeListForm,SomeListAction.java 和 SomeForm,SomeChangeAction.java。功能就是打開SomeList.jsp畫面,選擇某條Some進入SomeChange.jsp,修改好后返回SomeList.jsp。為了修正Session問題,在Some.jsp中添加了<html:hidden property="somethingID"/>,然后上面異常就發生了。
          歷經挫折,跋山涉水后找到原因。在SomeListForm中有屬性String[] somethingID,數組類型,在SomeForm中有屬性String somethingID是單值String類型,名字一致類型不一樣。
          當SomeChangeForm返回SomeListForm的時候,會將somethingID的值傳回。這時候就發生類型不匹配異常了。根本原因在于,配置struts-config.xml的時候,
          <action attribute="someForm" input="/form/somechange.jsp" name="someForm"
          path
          ="/somechange" type="com.somecorp.struts.action.SomeChangeAction">
                      
          <forward name="display" path="/form/somechange.jsp" />
                      <forward name="return" path="/somelist.do" />

          </action>
          高亮這行沒有設置 redirect="true",這樣的話,返回時就會將上個Form的值返回從而導致不匹配異常。
          1. 一般來說,這時候的Form是不需要將值返回的,改成<forward name="return" path="/somelist.do" redirect="true"/>就可以了。要注意其他參數的傳遞。
          2. 還有個改法就是將兩個Form中同名不同類型的屬性改個名字也可以。

          ==========打醬油的分割線====================
          對于redirect="true"不理解的可以參考下面這段:
          在ActionForward中有一個重要的屬性redirect,當redirect=false時,將保存存儲在http請求和請求上下文中的所有內容,僅在同一個應用中可用。當redirect=true時,Web客戶端進行一次新的http請求,請求的資源可以在同一個應用中,也可以不在,原來的請求參數不再保存,原來的請求上下文也被清除,新的http請求僅包含ActionForward的path屬性里所包含的參數。如果在同一個應用中,用戶會話的上下文會被維護。


          posted on 2009-12-15 14:04 游雯 閱讀(301) 評論(0)  編輯  收藏 所屬分類: Java技術

          主站蜘蛛池模板: 铁岭市| 临沧市| 嘉峪关市| 邵阳市| 金阳县| 乐安县| SHOW| 黄浦区| 商河县| 临朐县| 县级市| 同德县| 昌江| 思茅市| 苍梧县| 轮台县| 文昌市| 汉寿县| 亳州市| 乳源| 疏勒县| 清苑县| 青河县| 新平| 万山特区| 常德市| 林口县| 雷波县| 鸡西市| 威远县| 深州市| 苍山县| 同仁县| 枣庄市| 桂平市| 清镇市| 娱乐| 额敏县| 盐山县| 西盟| 卢龙县|