如何使用Struts验证器使用字段组合验证日期

时间:2010-11-04 13:00:40

标签: java struts struts-validation

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

答案 0 :(得分: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;}

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

祝你好运。