Как проверить дату с помощью комбинации полей с помощью валидатора Struts - PullRequest
1 голос
/ 04 ноября 2010

Если у меня есть 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 Ответ

1 голос
/ 04 ноября 2010

Просмотр документации Struts Руководство по проверке Struts найдите следующий пример

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

Я думаю, что вы могли бы бытьоснова для сравнения и проверки ваших трех полей, которые вместе образуют правильную дату

Удачи.

...