доступ к параметрам запроса изнутри валидатора - PullRequest
0 голосов
/ 24 июня 2009

Есть ли правильный способ доступа к другим полям формы изнутри валидатора? Есть ли другое решение, кроме:

context.getViewRoot().findComponent("formid:exampleField:example")?

е. Я хочу проверить поле города внутри пользовательского валидатора и проверить, является ли страна США.

1 Ответ

1 голос
/ 26 июня 2009

Перечитайте ваш вопрос, и я собираюсь истолковать его следующим образом:

"Вы хотели бы написать собственный валидатор, который проверяет, что если поле города существует, поле страны равно 'US'" *

Итак, я бы посмотрел на это следующим образом:

Сначала создайте интерфейс валидатора:

@Documented
@ValidatorClass(value=CountryEqualsUSValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CountryEqualsUS {

    String message() default "The country should be US for the city provided";

}

Затем создайте класс валидатора:

public class CountryEqualsUSValidator implements Validator<CountryEqualsUS> {

    public void initialize(CountryEqualsUS arg0) {
    }

    public boolean isValid(Object value) {

        if(value != null && value instanceof YourBeanClass) {

            YourBeanClass yourBeanClass = (YourBeanClass) value;

            if(/*some test logic here*/) {
                return true;
            else {
                return false;
            }

        }

        return false;

    }

}

Затем в классе, который вы хотите проверить:

@CountryEqualsUS
public class YourBeanClass {

    ...

}

Затем, наконец, в вашем контроллере / классе действий, когда форма отправлена, городом является значение, для которого вы хотите проверить страну, добавьте этот метод и вызовите его:

public boolean doValidation(YourBeanClass yourBeanClass) {

    ClassValidator requestValidator = new ClassValidator(yourBeanClass.getClass());
    InvalidValue[] validationMessages = requestValidator.getInvalidValues(yourBeanClass);

    if (validationMessages != null && validationMessages.length > 0) {

        for (int i = 0; i < validationMessages.length; i++) {

            //Add a validation message to be displayed to the user

        }

        return false;

    }
        return true;
}
...