JSF 2.0 + проверка бинов + больше групп проверки в одной форме

Я пытаюсь создать форму для редактирования объекта сущности при выборе из DataTable. Поэтому, когда пользователь нажимает commandButton в datatable, myBean.person Свойство заполняется соответствующим лицом объекта. Человек имеет свойство "статус".

Я хотел бы проверить форму редактирования с различными группами проверки в соответствии со значением свойства "status". Это возможно?

Я создал две разные группы проверки:

 @Entity
    public class Person{
        private String status;
        ...
        @NotNull(message = "{person.null.name}", groups = PersonNew.class)
        private String name;
        @NotNull(message = "{person.null.code}", groups = PersonActive.class)
        private String code;
    }

Я хотел бы проверить форму перед сохранением и когда статус "новый", то name свойство должно быть установлено. Когда статус "активен", то code свойство должно быть установлено.

У меня есть страница JSF:

<h:form id="personEdit">
    <h:inputText value="#{myBean.person.name}" />
    <h:inputText value="#{myBean.person.code}" />
    ... other fields for other properties ...
    <h:commandButton value="Save" action="#{myBean.save}" />
</h:form>

Я пытался использовать <f:validateBean /> тег с динамически установленным атрибутом validationGroups, но метод, который возвратил validationGroups, был вызван до того, как был извлечен объект фактического человека. Так что я не мог решить в соответствии с Person.status имущество.

Так можно ли определить PersonNew в качестве группы проверки, если лицо имеет статус "новый", в противном случае определите PersonActive как группа проверки?

Спасибо за любую помощь.

1 ответ

Если вы используете Hibernate Validator, чем выглядит @GroupSequenceProvider должен удовлетворить ваши потребности:

Аннотация @GroupSequence - это стандартизированная аннотация Bean Validation [...], которая позволяет статически переопределять последовательность групп по умолчанию для класса. Hibernate Validator также предлагает пользовательскую нестандартную аннотацию - org.hibernate.validator.group.GroupSequenceProvider - которая позволяет динамически переопределять последовательность групп по умолчанию.

Смотрите официальное руководство.

Другие вопросы по тегам