打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
hk编写扩展Struts Validator校验密码输入
userphoto

2006.04.16

关注
alidator校验密码输入
使用Struts的validator校验页面form中的两个字段是否一致,一般用在校验密码,当用户输入两次密码的时候需要校验用户的两次输入是否一致,如果不一致需要报错.实现这个功能的步骤如下:
编写一个校验器(Validator),实现对form中两个字段的一致性校验:
package cn.com.syni.net800114.validator;
 
import org.apache.commons.validator.ValidatorUtil;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.GenericValidator;
 
import org.apache.struts.action.ActionErrors;
import org.apache.struts.validator.Resources;
 
import javax.servlet.http.HttpServletRequest;
 
public class ValidationUtil {
public static boolean validateTwoFields( Object bean, ValidatorAction va,
Field field, ActionErrors errors,
HttpServletRequest request) {
String value = ValidatorUtil.getValueAsString(bean, field.getProperty());
String sProperty2 = field.getVarValue("secondProperty");
String value2 = ValidatorUtil.getValueAsString(bean, sProperty2);
 
if (!GenericValidator.isBlankOrNull(value)) {
try {
if (!value.equals(value2)) {
errors.add(field.getKey(),
Resources.getActionError(request, va, field));
return false;
}
}
catch (Exception e) {
errors.add(field.getKey(),
Resources.getActionError(request, va, field));
return false;
}
}
return true;
}
}
编写validator-rules文件,增加一个自定义校验器的配置:
<validator name="twofields"
classname="cn.com.syni.net800114.validator.ValidationUtil" method="validateTwoFields"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="required" msg="errors.twofields">
<javascript><![CDATA[
function validateTwoFields(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oTwoFields = new twofields();
for (x in oTwoFields) {
var field = form[oTwoFields[x][0]];
var secondField = form[oTwoFields[x][2]("secondProperty")];
if (field.type == ‘text‘ ||
field.type == ‘textarea‘ ||
field.type == ‘select-one‘ ||
field.type == ‘radio‘ ||
field.type == ‘password‘) {
var value;
var secondValue;
// get field‘s value
if (field.type == "select-one") {
var si = field.selectedIndex;
value = field.options[si].value;
secondValue = secondField.options[si].value;
} else {
value = field.value;
secondValue = secondField.value;
}
if (value != secondValue) {
if (i == 0) {
focusField = field;
}
fields[i++] = oTwoFields[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join(‘\n‘));
}
return bValid;
}]]></javascript>
</validator>
编写JSP页面
form中包括要进行自定义校验的字段,这里是两个password类型的input,校验器将校验用户输入的这两个字段是否一致,如果不一致,将通过弹出对话框告诉用户:
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ page contentType="text/html; charset=GBK" %>
<html:html><head><title>Regiestation</title></head>
<body>
<html:form action="/registationAction.do" onsubmit="return validateRegistation(this);">
<bean:message key="userForm.password"/>
<html:password property="password"/><br>
<bean:message key="userForm.password2"/>
<html:password property="password2"/>
<br>
<html:submit property="submit" value="Submit"/><br>
<html:reset value ="Reset"/>
</html:form>
</body>
<html:javascript formName="registation" staticJavascript="true" dynamicJavascript="true"/>
</html:html>
其中,<html:form action=”/registationAction.do” onsubmit=”return validatorRegistation(this);”>说明这个窗口需要使用Struts Validator进行校验,action属性指定这个JSP页面对应的Action,onsubmit属性指定了这个页面校验所对应的ActionForm Bean,它的规则是 “return + validator + FormBeanName + (this);”,这里的例子表示这个页面的action是/regiestationAction.do,它对应的Action Form名称为Registation(注意,如果在Struts-config.xml文件中ActionForm的名字为registation的话这里也要把第一个字母变为大写,否则出错.
最后倒数第二行的<html:javascrip>标记说明要使用java script进行客户端校验,formName属性指定Action Form的名称,这个名称要跟struts-config.xml文件中的配置一致,严格区分大小写,staticJavascript和dynamicJavascript分别指定是使用静态的还是动态的javascript代码进行校验.
编写validator.xml配置文件:
<form name="registation" >
<field property="password" depends="required,twofields">
<msg name="required" key="errors.required"/>
<msg name="twofields" key="errors.twofields"/>
<arg0 key="userForm.password"/>
<arg1 key="userForm.password2" />
<var>
<var-name>secondProperty</var-name>
<var-value>password2</var-value>
</var>
</field>
</form>
这里要注意<var-name>属性的secondProperty要跟ValidatorUtil.java中的校验方法中的代码一致,否则ValidatorUtil.java不能正确进行校验,<var-value>属性指定这个校验字段所参照的校验字段,上面的配置代码说明要对form中的password字段进行校验,它必须和另外一个叫做password2的字段一致.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Struts Validator验证器使用指南
Struts源代码阅读(Commons-Validator) - [Matrix - 与 Java 共舞]
Struts Validator 开发指南
struts原理与实践(6)
Qiqi_Boy
Struts2 validation
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服