Проверка модели таблицы с использованием extval

Моя страница содержит вместо редактора значений в таблице. Что-то вроде этого:

<h:dataTable var="actor" value="#{bean.actors}">
  <h:column>
   <h:input value="#{actor.name}"/>
  <h:column>
</h:dataTable>

Я хочу, чтобы все акторы в списке bean.actors были проверены, когда пользователь нажимает кнопку "Сохранить". Поэтому я поместил следующую аннотацию внутри моего боба

@BeanValidation(useGroups = Default.class, modelValidation = @ModelValidation(isActive = true))
private List<Actor> actors;

Внутри моего актерского объекта у меня есть

@NotNull
private String name;

@AssertTrue
public boolean isValid()

Таким образом, аннотация NotNull проверяется для всех участников, но AssewtTrue не проверяется.

1 ответ

Решение

После долгой отладочной сессии все выглядит четко и понятно;-)

для каждой привязки (например, #{bean.property1.property2.actors}) extval analysis 1) базовое свойство (property2) 2) класс бина

Помимо других вещей, он искал аннотации BeanValidation и, если они были найдены, выполняет проверку модели. Таким образом, чтобы указать, что субъекты свойства должны быть действительными, нам нужно проверить его непосредственный родитель. Поэтому правильная конфигурация должна выглядеть так:

@BeanValidation(useGroups = Default.class, modelValidation = @ModelValidation(isActive = true,validationTargets={"#{accountController}"}))
public class ActorController{

   @Valid
   public List<Actor> getActors


}

Еще одна странная вещь - почему @Valid не работает, если я ставлю на уровень поля. Но я не успеваю это проверить

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