用Validator框架实现基本的表单验证,需要对ActionForm Bean、struts-config.xml、validation.xml、资源文件、JSP进行改动,例子:
★ ActionForm Bean
如果要使用Validator框架,应该用ValidatorForm或DynaValidatorForm或它们的子类。
★ struts-config.xml
- <struts-config>
- <form-beans>
- <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
- <form-property name="username" type="java.lang.String"/>
- <form-property name="password" type="java.lang.String"/>
- form-bean>
- form-beans>
- <action-mappings>
- <action path="/login"
- type="com.yourcompany.struts.action.LoginAction"
- name="loginForm"
- attribute="loginForm"
- input="/login.jsp"
- scope="request"
- validate="true">
- <forward name="success" path="/index.jsp"/>
- action>
- action-mappings>
- <message-resources key="app" parameter="com.yourcompany.struts.ApplicationResources"/>
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames"
- value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
- plug-in>
- struts-config>
这里和不用Validator的struts-config.xml有两处不同:
① 在action<action></action>标签中,增加了input和validate属性,input指定当表单验证失败时将跳转到的页面。
② 在配置文件的最后增加了plug-in <plug-in></plug-in> 标签。
★ validation.xml
- <form-validation>
- <formset>
- <form name="loginForm">
- <field property="username" depends="required">
- <msg name="required" key="error_text_missing"/>
- <arg0 key="label_username"/>
- field>
- form>
- formset>
- form-validation>
如果loginForm是ValidatorForm或DynaValidatorForm,这里form标签里的name属性将指定ActionForm Bean的名字,即对应于struts-config.xml中form-bean标签里的name属性;如果loginForm是ValidatorActionForm或DynaValidatorActionForm,这里form标签里的name属性将指定Action的path,即对应于struts-config.xml中action标签里的path属性。
★ 资源文件
- label_username=username
- error_text_missing={0} is required.
★ JSP
- <html:text property="username"/>
- <font color="red">
- <html:errors bundle="app" property="username"/>
- font>
增加html:errors <html:errors> <html:errors> 标签来显示验证失败信息,其中bundle属性对应于struts-config.xml中message-resources标签<message-resources></message-resources>里的key属性,property属性对应于validation.xml中field标签<field></field>里的property属性。 </html:errors> </html:errors>