色七七色久久影院2017:hk编写扩展Struts Validator校验密码输入

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 01:23:35
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文件,增加一个自定义校验器的配置:
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">
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;
}]]>


编写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" %>
Regiestation
















其中,说明这个窗口需要使用Struts Validator进行校验,action属性指定这个JSP页面对应的Action,onsubmit属性指定了这个页面校验所对应的ActionForm Bean,它的规则是 “return + validator + FormBeanName + (this);”,这里的例子表示这个页面的action是/regiestationAction.do,它对应的Action Form名称为Registation(注意,如果在Struts-config.xml文件中ActionForm的名字为registation的话这里也要把第一个字母变为大写,否则出错.
最后倒数第二行的标记说明要使用java script进行客户端校验,formName属性指定Action Form的名称,这个名称要跟struts-config.xml文件中的配置一致,严格区分大小写,staticJavascript和dynamicJavascript分别指定是使用静态的还是动态的javascript代码进行校验.
编写validator.xml配置文件:







secondProperty
password2



这里要注意属性的secondProperty要跟ValidatorUtil.java中的校验方法中的代码一致,否则ValidatorUtil.java不能正确进行校验,属性指定这个校验字段所参照的校验字段,上面的配置代码说明要对form中的password字段进行校验,它必须和另外一个叫做password2的字段一致.