代码之家  ›  专栏  ›  技术社区  ›  ziggy

如何使用struts验证器结合字段来验证日期?

  •  1
  • ziggy  · 技术社区  · 14 年前

    如果一个表单上有3个文本字段,如何使用Struts验证器检查所有3个字段的组合是否构成有效日期。

    例如

    <form action="/test">
    
      <input type=text name=day> 
    
      <select name=month>
      <option value=JAN>JAN</option>
      <option value=JAN>JAN</option>
      <option value=JAN>FEB</option>
         ---
        ---
      <option value=DEC>DEC</option>
     </select>
    
     <input type=text name=year> 
    
    </form>
    

    在Struts验证器中,我可以这样做

     <field
                    property="day"
                    depends="required,mask">
                        <arg key="myForm.day"/>
                        <var>
                            <var-name>mask</var-name>
                            <var-value>^[0-9]*$</var-value>
                        </var>
                </field>         
    

    但是,我如何检查日+月+年是有效日期?包括二月和闰年?

    1 回复  |  直到 14 年前
        1
  •  1
  •   hkadejo    14 年前

    Struts Validator Guide

    Comparing Two Fields
    

    <validator name="twofields"
       classname="com.mysite.StrutsValidator"
       method="validateTwoFields"
       msg="errors.twofields"/>
    
    <field property="password"
       depends="required,twofields">
          <arg position="0" key="typeForm.password.displayname"/>
          <var>
             <var-name>secondProperty</var-name>
             <var-value>password2</var-value>
          </var>
    

    public static boolean validateTwoFields(
    Object bean,
    ValidatorAction va, 
    Field field,
    ActionErrors errors,
    HttpServletRequest request, 
    ServletContext application) {
    
    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)) {
             errors.add(field.getKey(),
                Resources.getActionError(
                    application,
                    request,
                    va,
                    field));
    
             return false;
          }
       } catch (Exception e) {
             errors.add(field.getKey(),
                Resources.getActionError(
                    application,
                    request,
                    va,
                    field));
             return false;
       }
    }
    
    return true;}