Заказ JSF Validator - PullRequest
       20

Заказ JSF Validator

2 голосов
/ 11 сентября 2011

У меня проблема с проверкой некоторых компонентов.

По сути, у меня есть форма, в которой пользователи Интернета могут создать новый профиль, и они должны ввести свое имя пользователя там.

Я хочуподтвердите имя пользователя в отношении:

  1. Длина
  2. Шаблон
  3. Если имя пользователя уже существует

Для маркера 3 я написал свойсобственный пользовательский валидатор @UserExists.Проблема в том, что я не хочу запускать этот валидатор, если какой-либо из первых двух валидаторов потерпит неудачу.

Я обнаружил, что использование @GroupSequence в моём валидаторе UserExists помогает применительно к последовательности, ноJSF все равно вызовет мой валидатор, если один из других валидаторов сообщит, что введенные данные неверны.Могу ли я как-нибудь проверить, не сработал ли уже один из других валидаторов?

Вот свойство, которое я хотел проверить:

@Size(min = 3, max = 20)
@Pattern(regexp = "[A-Za-z]+[A-Za-z0-9]*")
@UserExists(message = "User already exists")
private String username;

Пользовательский валидатор имеет следующие атрибуты:

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = UserExistsValidator.class)
@GroupSequence({Size.class, Pattern.class})
public @interface UserExists

1 Ответ

2 голосов
/ 15 сентября 2011

Аннотация @GroupSequence предназначена для указания в bean-компоненте, содержащем ограничения.В качестве членов должны быть указаны группы проверки, а не отдельные ограничения.

Таким образом, ваш пример может быть реализован так:

@GroupSequence({Form.class, ExpensiveChecks.class})
public class Form {

    public interface ExpensiveChecks {}

    @Size(min = 3, max = 20)
    @Pattern(regexp = "[A-Za-z]+[A-Za-z0-9]*")
    @UserExists(message = "User already exists", groups=ExpensiveChecks.class)
    private String username;

}

Таким образом переопределяется последовательность групп по умолчанию для типа Form.Сначала проверяются ограничения @Size и @Pattern.Только в случае успешного выполнения ограничение @UserExists (которое входит в группу ExpensiveChecks) будет проверено.

Подробнее о последовательностях групп и переопределении групповых последовательностей по умолчанию можно узнать в Hibernate Validator * 1014.* справочное руководство и проверка бинов спецификация .

...