您的位置:首页 > 编程语言 > Java开发

struts 1.2 validate 验证框架

2009-10-11 15:56 405 查看
web开发中,使用到了struts 开发组件,其在服务器端验证表单数据时使用validate框架步骤:
1.配置环境:项目中加上struts 1.2 相应的jar包和tld文件;
2.加入常用的验证规则validator-rules.xml;
3.创建验证文件validation.xml 文件;
4.在struts-config.xml配置文件引入上两文件:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
5.在struts-config.xml 的action和form-bean的配置:
<form-bean name="loginForm" type="form.LoginForm"/>

注:form.LoginForm要继承org.apache.struts.validator.ValidatorForm 其有两个属性
username,password,必须提供该两个属性的get/set方法.
或 <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>
action的配置:
<action path="/login" type="struts.action.LoginAction"
parameter="login" name="loginForm" scope="request"
validate="true" input="/WEB-INF/jsp/login.jsp">
<!--诺定义了attribute,则validation的form的name已其一致-->
<forward name="success"
path="/WEB-INF/jsp/welcome.jsp"></forward>
</action>

6.validation.xml的配置:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<global>
</global>
<formset>
<form name="loginForm">
<field property="username" depends="required"> <!--required为验证规则在validator-rules.xml已经定义好,可直接使用-->
<arg key="login.username"/> <!--其验证该action中的loginForm表单中的username若是否为null或""则验证-->
</field> <!--成功,中的username的数据不合法。页面将跳转到action中定义的input属性路径->
<field property="password" depends="required"> <!-返回信息:自动封装到ActionErrors返回,required默认为errors.required--->
<arg key="login.password"/> <!-- 所以在资源文件中将有errors.required={0} is required!-->
</field> <!-返回给页面的{0}将由arg 的key 去找资源文件的相应的key的value填充--->
</form> <!--要是想自定required返回的信息包装到ActionErrors的key值自己定义使用:-->
</formset> <!-- <msg name="required" key="login.username.errors.required"/> -->
</form-validation> <!--validator-rules.xml中还有其他验证规则mask,maxlength,minlength...-->
资源文件:MessageResources_zh.properties <!-资源文件的value值要是要都个{n}也可以通过<arg1 key="4" name="maxlength" />给定-->
在struts-config.xml中引入<message-resources parameter="MessageResources" />

7.页面login.jsp设计:
<%@taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
<body>
<html:errors property="username"/><br>
<html:errors property="password"/><br>
<html:errors property="password1"/>
<html:form action="login.do" onsubmit="return validateLoginForm(this);">
用户名:<html:text property="username"></html:text><br>
密码:<html:password property="password"></html:password><br>
2密码:<html:password property="password1"></html:password><br>
<html:submit value="login" />
<html:javascript formName="loginForm"/> <!--这两条语句将有struts自动生成js验证代码-->
</html:form>
</body>
8.自定验证:验证两个密码的内容一致:
1)在validation.xml加入
<global>
<validator name="equalsCheck"
classname="struts.EqualsChecks"
method="equalsChecks"
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.equalsCheck"/>
</global>
2)写类
public class EqualsChecks extends FieldChecks{
private static final long serialVersionUID = 98237471L;
public static boolean equalsChecks(java.lang.Object bean,
org.apache.commons.validator.ValidatorAction va,
org.apache.commons.validator.Field field,
ActionMessages errors,
org.apache.commons.validator.Validator validator,
javax.servlet.http.HttpServletRequest request){
String value2 = ValidatorUtils.getValueAsString(bean, field.getProperty());
if (!GenericValidator.isBlankOrNull(value2)) {
if(value2.equals(ValidatorUtils.getValueAsString(bean, field.getVarValue("firstProperty")))){
return true;
}
}
errors.add(field.getProperty(),Resources.getActionMessage(request, va, field));
return false;
}
}

3)配置validation.xml 的form:
<field property="password1" depends="equalsCheck,required">
<var>
<var-name>firstProperty</var-name>
<var-value>password</var-value>
</var>
</field>

初次写这东西,写的不全算面,希望同行给点意见及补充。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: