1

如果我在表单上有 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>         

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

4

1 回答 1

1

查看 Struts 文档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;}

我认为您可以作为比较和验证您的三个字段的基础,这三个字段共同构成了正确的日期

祝你好运。

于 2010-11-04T15:17:48.277 回答