要Struts默认的数据验证方法中,如果数据不是字符串,则先把其它的对象转换成字符串的形式ValidatorUtil.getValueAsString(bean, field.getProperty()),然后再进行验证。这样转换成字符串的形式后可能跟其格式就不对了。解决方法有两个,方法一是改变你的数据写法,直到正确;方法二是自己写一个验证日期数据的方法。这两种方法的实现都不难,你可参考一下Struts的源程序:
下面我列一个validateMaxLength()函数为例:
例如下面是Struts的org.apache.struts.validator.FieldChecks中validateMaxLength()函数源程序,如果是用了其它的验证方法,与这里可能会有些不同:
public static boolean validateMaxLength(Object bean,
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) { String value = null;
if (isString(bean)) {
value = (String) bean;
} else {
value = ValidatorUtil.getValueAsString(bean, field.getProperty());
} if (!GenericValidator.isBlankOrNull(value)) {
try {
int max = Integer.parseInt(field.getVarValue("maxlength")); if (!GenericValidator.maxLength(value, max)) {
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;
}
下面我列一个validateMaxLength()函数为例:
例如下面是Struts的org.apache.struts.validator.FieldChecks中validateMaxLength()函数源程序,如果是用了其它的验证方法,与这里可能会有些不同:
public static boolean validateMaxLength(Object bean,
ValidatorAction va, Field field,
ActionErrors errors,
HttpServletRequest request) { String value = null;
if (isString(bean)) {
value = (String) bean;
} else {
value = ValidatorUtil.getValueAsString(bean, field.getProperty());
} if (!GenericValidator.isBlankOrNull(value)) {
try {
int max = Integer.parseInt(field.getVarValue("maxlength")); if (!GenericValidator.maxLength(value, max)) {
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;
}
<form name="LandagentForm">
<field property="startdate" depends="required,date">
<arg0 key="landagent.startdate"/>
<var>
<var-name>datePatternStrict</var-name>
<var-value>yyyy-MM-dd</var-value>
</var>
</field>
<field property="enddate" depends="required,date">
<arg0 key="landagent.enddate"/>
<var>
<var-name>datePatternStrict</var-name>
<var-value>yyyy-MM-dd</var-value>
</var>
</field>
</form>