在struts中使用validate框架主要就是以下几个步骤:
1,formbean
·validateForm 和 validateActionForm (不要重写里面的validate方法)
2,struts-config.xml
·主要就是加入插件,来整合validate
·设置js在页面的弹出短路
3,validate的配置文件--validation.xml validator-rules.xml
·配置验证信息
·自己写个校验器
4,资源文件
·在资源文件中药注意的就是对于的validate的配置文件中的信息来写,一定要使key 相同
·errors -
5,页面
·页面要注意使用国际化的时候,要使用的关键字是key , 和配置文件中的key名字相 同
·错误信息 <html:errors property > property里面的值和字段的名字相同
========formbean:
//使用了validate框架,在formbean中就不要再写validte方法
//如果是多个Action共用同一个formbean,只是对于里面的验证规则进行修改,则可以使用ValidatorActionForm
public class MyForm extends /*ValidatorForm*/ValidatorActionForm {
private String username ;
private String password ;
private String password2 ;
private String email ;
private String birthday ;
private String idcard;
....(setter,getter方法)
}
========struts-config.xml配置文件
<struts-config>
<form-beans>
<form-bean name="registerForm" type="hwt.form.MyForm"/>
<!-- 动态formbean,使用的DynaValidatorForm -->
<form-bean name="dynaForm" 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="/regist" type="hwt.action.RegisterAction" name="registerForm" validate="true" input="/WEB-INF/page/register.jsp">
<forward name="success" path="/WEB-INF/page/success.jsp"/>
</action>
<action path="/update" type="hwt.action.RegisterAction" name="registerForm" validate="true" input="/WEB-INF/page/update.jsp">
<forward name="success" path="/WEB-INF/page/success.jsp"/>
</action>
<action path="/login" type="hwt.action.RegisterAction" name="dynaForm" validate="true" input="/WEB-INF/page/login.jsp">
<forward name="success" path="/WEB-INF/page/success.jsp"/>
</action>
<action path="/goRegistPage" forward="/WEB-INF/page/register.jsp"/>
<action path="/goUpdatePage" forward="/WEB-INF/page/update.jsp"/>
<action path="/goLoginPage" forward="/WEB-INF/page/login.jsp"/>
</action-mappings>
<message-resources parameter="hwt.resources.ApplicationResources"/>
<!-- 这里便是alidate框架整合struts的关键步骤 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="true"/>
</plug-in>
</struts-config>
========validator.xml 和 alidation-rules.xml
<form-validation>
<formset>
<!-- 对于多个Action使用同一个form,在formbean中要继承alidatorActionForm -->
<!--动态表单-->
<form name="dynaForm">
<!-- 用户名 -->
<field property="username"
depends="required">
<arg key="prompt.username"/>
</field>
<!-- 密码 -->
<field property="password"
depends="required, minlength,maxlength">
<arg key="prompt.password" position="0"/>
<arg key="${var:minlength}" name="minlength"
resource="false" position="1"/>
<arg key="${var:maxlength}" name="maxlength"
resource="false" position="1"/>
<var>
<var-name>maxlength</var-name>
<var-value>15</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
</form>
<!--这里写的不是formbean在struts-config.xml的formbean名字,而是action的path
因为这两个action是同一个formbean
-->
<form name="/update">
<!-- 用户名 -->
<field property="username"
depends="required">
<arg key="prompt.username"/>
</field>
<!-- 密码 -->
<field property="password"
depends="required, minlength,maxlength">
<arg key="prompt.password" position="0"/>
<arg key="${var:minlength}" name="minlength"
resource="false" position="1"/>
<arg key="${var:maxlength}" name="maxlength"
resource="false" position="1"/>
<var>
<var-name>maxlength</var-name>
<var-value>15</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
<!-- 重复密码 -->
<field property="password2"
depends="required, validwhen">
<!--validwhen的错误消息是required,所以这里我想使用自己的错误消息
不要忘了写name 指明是那个校验器 -->
<msg key="errors.repeat" name="validwhen"/>
<arg key="prompt.password2" position="0"/>
<arg key="prompt.password" position="1"/>
<var>
<var-name>test</var-name>
<var-value>(*this*==password)</var-value>
</var>
</field>
<!-- email -->
<field property="email"
depends="required, email">
<arg key="prompt.email"/>
</field>
<!-- 出生日期 -->
<field property="birthday"
depends="required, date">
<arg0 key="prompt.birthday"/>
<var><var-name>datePattern</var-name><var-value>yyyy-MM-dd</var-value></var>
</field>
</form>
<form name="/regist">
<!-- 用户名 -->
<field property="username"
depends="required">
<arg key="prompt.username"/>
</field>
<!-- 密码 -->
<field property="password"
depends="required, minlength,maxlength">
<arg key="prompt.password" position="0"/>
<arg key="${var:minlength}" name="minlength"
resource="false" position="1"/>
<arg key="${var:maxlength}" name="maxlength"
resource="false" position="1"/>
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
</field>
<!-- 重复密码 -->
<field property="password2"
depends="required, validwhen">
<msg key="errors.repeat" name="validwhen"/>
<arg key="prompt.password2" position="0"/>
<arg key="prompt.password" position="1"/>
<var>
<var-name>test</var-name>
<var-value>(*this*==password)</var-value>
</var>
</field>
<!-- email -->
<field property="email"
depends="required, email">
<arg key="prompt.email"/>
</field>
<!-- 出生日期 -->
<field property="birthday"
depends="required, date">
<arg0 key="prompt.birthday"/>
<var><var-name>datePattern</var-name><var-value>yyyy-MM-dd</var-value></var>
</field>
<!-- 自己写的一个validator -->
<field property="idcard"
depends="required, idcard">
<arg key="prompt.idcard"/>
</field>
</form>
</formset>
自己写个验证器:
1,--------------实现类----------------------
public class IdCardCheck {
public static boolean idcardCheck(Object bean, ValidatorAction va,
Field field, ActionMessages errors, Validator validator,
HttpServletRequest request) {
String value = null;
//得到value
value = ValidatorUtils.getValueAsString(bean, field.getProperty());
if (value.length()!=18 && !isDigt(value)) {
errors.add(field.getKey(),
Resources.getActionMessage(validator, request, va, field));
return false;
} else {
return true;
}
}
private static boolean isDigt(String value) {
int length = value.length();
for(int i = 0 ; i < length ; i++){
if (!Character.isDigit(value.charAt(i))) {
return false;
}
}
return true;
}
}
2,----------------在alidation-rules.xml里面的配置-----------------
<!-- 自己写的一个校验器 -->
<validator name="idcard"
classname="hwt.idcardcheck.IdCardCheck"
method="idcardCheck"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg="errors.idcard"/>
3,-------------------使用 validator.xml中调用
<!-- 自己写的一个validator -->
<field property="idcard"
depends="required, idcard">
<arg key="prompt.idcard"/>
</field>
============页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
<html:javascript formName="/regist" method="jsFunction"/>
<!-- 使用js的话上面导入,不要忘了在form中写提交的方法,如果不想使用弹出的时全部弹出,
在struts-config.xml里面和validate整合的时候设置stopOnFirstError == true
-->
<html:form action="/regist" method="post" onsubmit="jsFunction(this)">
<!-- 这里主要注意的是html:errors 里面的property就是formbean里面的字段值 -->
<bean:message key="prompt.username"/>:<html:text property="username"/><html:errors property="username"/><br/>
<bean:message key="prompt.password"/>:<html:password property="password"/><html:errors property="password"/><br/>
<bean:message key="prompt.password2"/>:<html:password property="password2"/><html:errors property="password2"/><br/>
<bean:message key="prompt.email" />:<html:text property="email"/><html:errors property="email"/><br/>
<bean:message key="prompt.birthday" />:<html:text property="birthday"/><html:errors property="birthday"/><br/>
身份证:<html:text property="idcard"/><html:errors property="idcard"/><br/>
<html:submit><bean:message key="button.confirm"/></html:submit> <html:reset><bean:message key="button.reset"/></html:reset>
</html:form>