[Seasar-user:17999] [SAStrutsAOS] SAStruts側のvalidationが動作しない事例報告

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2009年 7月 14日 (火) 11:42:20 JST


岡内です。お世話になっております。

SAStrutsAOSを使用して、既存StrutsシステムにSAStruts画面を追加していますが、
SAStruts側のvalidationの箇所で下記のような現象に遭遇したので報告いたしま
す。

●バージョン
 このバージョンを使用しました。
 http://d.hatena.ne.jp/newta/20090610/1244647389

●現象
 SAStrutsのvalidationを使う(厳密には、ActionのExecuteアノテーションに
input="〜"を設定する)と、
 該当メソッドアクセス時にNullPointerExceptionが発生します。

      java.lang.NullPointerException

org.apache.commons.validator.ValidatorResources.getForm(ValidatorResources.java:433)


org.seasar.struts.validator.S2AOSValidatorResources.getForm(S2AOSValidatorResources.java:121)


org.apache.commons.validator.Validator.validate(Validator.java:350)

org.seasar.struts.action.ActionWrapper.validateUsingValidator(ActionWrapper.java:171)


org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:108)

org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:86)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)


org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:125)


org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
             javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
             javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)


org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)


org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)


org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)

org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90)

org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)


org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)


org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

●調べた限りでの再現性

 常に発生するわけではなく、下記のような場合に発生するようです。

 1)struts-config.xmlのplug-inタグにvalidation.xmlが指定されていない場合

      <plug-in className="org.seasar.struts.validator.S2AOSValidatorPlugIn"
>
            <set-property
                  property="pathnames"
                  value="/WEB-INF/validator-rules.xml"/>
      </plug-in>

 2)validation.xmlが指定されていても、form定義がひとつもない場合

      <form-validation>
            <global/>
      </form-validation>

●対策

 struts-config.xmlのplug-inにvalidation.xmlも含まれていて

      <plug-in className="org.seasar.struts.validator.S2AOSValidatorPlugIn"
>
            <set-property
                  property="pathnames"
                  value=
"/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
      </plug-in>


 validation.xmlにひとつ以上の(ダミー可)form定義がある。

      <form-validation>
            <global/>
            <formset>
                  <form name="/Sample">
                        <field property="hoge" depends="required">
                              <arg0 key="labels.hoge"/>
                        </field>
                  </form>
            </formset>
      </form-validation>

もし間違っていたらごめんなさい。m(__)m


以上


Seasar-user メーリングリストの案内