2015-07-29 3 views
1

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

Дело в том, что у меня есть два поля даты на странице .jsp, и оба они требуются. Короче говоря, у меня есть два поля, которые необходимы, но я не могу получить два сообщения об ошибках в случае, если они оба пустые. Единственное сообщение, которое должно отображаться, это «пожалуйста, вставьте интервал дат», независимо от того, какой из них пуст (или, если они оба пустые).

Я использую validation.xml, Struts версии 1.3

+0

Создание пользовательского валидатора. –

+0

Как это сделать? Есть ли у вас учебник или что-то, что я мог бы использовать? Спасибо. – igorfeiden

ответ

1

валидацию двух или более полей слишком легко, если вы используете ValidatorForm и validate метод.

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

Это пример того, как вы можете сравнить два поля, чтобы увидеть, имеют ли они одинаковое значение. Хорошим примером этого является то, что вы проверяете пользователя, изменяющего свой пароль, и есть поле основного пароля и поле подтверждения.

<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> 
</field> 
public class CustomValidator { 

    // ------------------------------------------------------------ Constructors 

    /** 
    * Constructor for CustomValidator. 
    */ 
    public CustomValidator() { 
     super(); 
    } 

    // ---------------------------------------------------------- Public Methods 

    /** 
    * Example validator for comparing the equality of two fields 
    * 
    * http://struts.apache.org/userGuide/dev_validator.html 
    * http://www.raibledesigns.com/page/rd/20030226 
    */ 
    public static boolean validateTwoFields(
     Object bean, 
     ValidatorAction va, 
     Field field, 
     ActionMessages errors, 
     HttpServletRequest request) { 

     String value = 
      ValidatorUtils.getValueAsString(bean, field.getProperty()); 
     String property2 = field.getVarValue("secondProperty"); 
     String value2 = ValidatorUtils.getValueAsString(bean, property2); 

     if (!GenericValidator.isBlankOrNull(value)) { 
      try { 
       if (!value.equals(value2)) { 
        errors.add(
         field.getKey(), 
         Resources.getActionMessage(request, va, field)); 

        return false; 
       } 
      } catch (Exception e) { 
       errors.add(
        field.getKey(), 
        Resources.getActionMessage(request, va, field)); 
       return false; 
      } 
     } 
     return true; 
    } 

} 
+0

Я получаю это сейчас, и это очень помогло мне. Угадайте, мне нужно сделать еще несколько исследований Struts! – igorfeiden

Смежные вопросы