struts验证框架中ValidateWhen这个验证规则怎么用?哪位指点一下

crazyguo007 2005-10-26 06:37:52
我想有validatewhen验证两次密码输入是否一致,我的使用方法如下:
<field depends="validwhen" property="password2">
<var>
<var-name>test</var-name>
<var-value>((password==*this*) and (*this*!=null))</var-value>
</var>
</field>
但不起作用,正确的用法是什么?哪位知道?
...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vincent2013SH 2005-10-28
  • 打赏
  • 举报
回复
package com.xxx.xx.util;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.util.ValidatorUtils;
import org.springframework.validation.Errors;
import org.springmodules.commons.validator.FieldChecks;
import org.springframework.validation.ValidationUtils;
import org.springmodules.commons.validator.MessageUtils;

/**
* ValidationUtil Helper class for performing custom validations that
* aren't already included in the core Commons Validator.
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
public class ValidationUtil {
public static boolean validateTwoFields(Object bean, ValidatorAction va,
Field field, Errors errors) {
String value =
ValidatorUtils.getValueAsString(bean, field.getProperty());
String sProperty2 = field.getVarValue("secondProperty");
String value2 = ValidatorUtils.getValueAsString(bean, sProperty2);
if (!GenericValidator.isBlankOrNull(value)) {
try {
if (!value.equals(value2)) {
rejectValue(errors, field, va);
return false;
}
}
catch (Exception e) {
rejectValue(errors, field, va);
return false;
}
}

return true;
}

protected static void rejectValue(Errors errors, Field field,
ValidatorAction va) {
String fieldCode = field.getKey();
String errorCode = MessageUtils.getMessageKey(va, field);
Object[] args = MessageUtils.getArgs(va, field);
errors.rejectValue(fieldCode, errorCode, args, errorCode);
}

}
//其实就是把Matt Raible的代码复制了过来
//因为这个twofields验证器还没有发布,或者我不知道,所以要这么麻烦的自己写,等他成为了
//springmodules validator的一部分就简单了
Vincent2013SH 2005-10-28
  • 打赏
  • 举报
回复
然后在validator-rules.xml增加一个validator如下
<validator name="twofields"
classname="com.xxx.xx.util.ValidationUtil"
method="validateTwoFields"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.springframework.validation.Errors"
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>
Vincent2013SH 2005-10-28
  • 打赏
  • 举报
回复
<field property="password" depends="twofields,minlength">
<arg0 key="password"/>
<arg1 key="confirmPass"/>
<var>
<var-name>secondProperty</var-name>
<var-value>confirmPass</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
</field>
crazyguo007 2005-10-26
  • 打赏
  • 举报
回复
给点意见!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧