Я реализовал упорядоченную проверку с помощью GroupSequence, но, вообще говоря, реализация проверки компонентов EJB не является прозрачной.
То есть, пока первая группа полностью не подтверждена, вы не можете запустить проверку второй группы.
* 1005 Е.Г. *
У меня есть 3 проверенных поля с пользовательскими валидаторами. Идея довольно проста: каждое поле должно проверяться набором валидаторов независимо друг от друга (нисходящая мощность).
@StringPropertyNotNullOrEmptyConstraint(message = "Group name is required", groups = {ValidationStep1.class})
private final StringProperty groupName;
@StringPropertyNotNullOrEmptyConstraint(message = "Group password is required", groups = {ValidationStep1.class})
@StringPropertyMatchConstraint(message = "The given password phrases do not match", dependentProperties = {"groupPasswordMatch"}, groups = {ValidationStep2.class})
private final StringProperty groupPassword;
@StringPropertyNotNullOrEmptyConstraint(message = "Group password match is required", groups = {ValidationStep1.class})
@StringPropertyMatchConstraint(message = "The given passwords phrases do not match", dependentProperties = {"groupPassword"}, groups = {ValidationStep2.class})
private final StringProperty groupPasswordMatch;
public interface ValidationStep1 {
}
public interface ValidationStep2 {
}
@GroupSequence({GroupDialogModel.class, ValidationStep1.class, ValidationStep2.class})
public interface GroupDialogModelValidationSequence {
}
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
Set<ConstraintViolation<GroupDialogModel>> constraintViolations = validator.validate(this, GroupDialogModelValidationSequence.class);
Предостережение в этом подходе состоит в том, что каждое поле должно сначала пройти ValidationStep1 и только после успешного завершения каждой проверки шага 1 переходит к шагу 2. Например, даже если поля пароля не пусты, но содержат разные значения, проверка для они успешны, если поле имени группы не содержит никакого значения. И только после того, как я ввел какое-то значение в имя группы, группа ValidationStep1 успешно выполняется, а затем отображает результат проверки ValidationStep2 (пароли не совпадают).
Создание каждой группы для каждого поля в каждой последовательности - плохая практика, ИМХО, но, похоже, другого выбора нет.
Любое другое решение высоко ценится.