要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;
    }

解决方案 »

  1.   

    //这里日期的验证格式是yyyy-MM-dd
    <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>