私はHTMLフォームを持っていますが、Strutsを使用して、ユーザーがサイトに登録する前に有効な電子メールアドレスを入力したことを検証しようとしています。
フォームが送信されると、検証は行われていないように見え、フォームはそのままアクションパラメータクラスに送信されます。
私はStrutsを初めて使用するので、明らかなことを見逃したと仮定してください(おそらく持っているため)。
私のフォームは次のようになります(UserRegistrationAddForm.jsp):
<form name="registrationAddForm" method="post" action="UserRegistrationAdd">
<div class="form-label-holder">
<label for="email"><fmt:message key="LOGON_ID" bundle="${storeText}" /><span class="mandatoryindicator"> *</span></label>
</div>
<div class="form-field-holder">
<input id="email" class="required email" type="text" name="logonId" value="<c:out value="${paramSource.logonId}" />" />
</div>
<input type="image" src="<c:out value="${jspStoreImgDir}" />mobile/images/next-button.png" />
</form>
私の構成は(struts-config.xml)です:
<struts-config>
<form-beans>
<form-bean name="UserRegAddForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="logonId" type="java.lang.String" />
</form-bean>
</form-beans>
<action
parameter="com.example.UserRegistrationAddCmd"
path="/UserRegistrationAdd" type="com.example.LTPATokenGenerationEnabledBaseAction"
name="UserRegAddForm">
<set-property property="https" value="0:1"/>
<set-property property="authenticate" value="0:0"/>
</action>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml"/>
</plug-in>
</struts-config>
検証が(validator-rules.xml)として構成されている場合:
<form-validation>
<form name="UserRegAddForm">
<field property="logonId" depends="required,email">
<arg key="registrationAddForm.logonId" />
</field>
</form>
</form-validation>
スタックは次のことを示しています。
at com.example.BaseAction.executeAction(BaseAction.java:722)
at com.example.struts.BaseAction.execute(BaseAction.java:150)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at com.example.struts.ECActionServlet.processRequest(ECActionServlet.java:218)
at com.example.struts.ECActionServlet.doPost(ECActionServlet.java:174)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
スタックトレースは、処理の次のステップでのエラーによるものであるため、それほど遠くまで到達することはありません。
興味深いことに、スタックにはアクションタイプへの参照が記載されていないcom.example.LTPATokenGenerationEnabledBaseAction
ため、何かを誤って構成したと思いますか?