Таким образом, вы можете подтвердить ввод данных с использованием JSR-303 аннотации на связывающим свойства компонента:Подтвердить произвольные объекты в JSF?
class Ticket {
@MinAge(18)
Person person;
}
class Person {
@Min(1) @Max(100)
int age;
}
<p:inputText id="age" value="#{bean.ticket.person.age}" />
Здесь свойство person.age проверяется (между 1..100) без проблем.
Проблема в том, что я хочу проверить внешний экземпляр (person.age> = 18). Но как сделать свойство bean.ticket.person
известным для проверки?
Я хочу что-то вроде:
<p:inputText id="age" value="#{bean.ticket.person.age}">
<f:validate value="#{bean.ticket.person}" />
</p:inputText>
Или:
<p:inputText id="age" value="#{bean.ticket.person.age}">
<f:validator id="jsr303-validator" value="#{bean.ticket.person}" />
</p:inputText>
Проблема заключается в том, что я не могу передать значение <f:validator />
. Я хочу добавить дополнительные свойства к процессу проверки, более того, только входы появились на странице.
P.S. Это упрощенный пример, реальное приложение:
...
<p:inputText id="principalLabel" value="${activeACL.principal.label}" readonly="true" />
<p:commandButton value="Choose..." onclick="choosePrincipalDialog.show()" />
...
<p:commandButton value="Save" action="${bean.saveACL}" oncomplete="editACLDialog.hide()" update="index" />
И activeACL типа ACL_DTO:
class ACL_DTO {
...
@IdRequired
Principal_DTO principal;
}
Здесь ActionListener choosePrincipalDialog
«s будет неявным Изменение ${activeACL.principal.id}
, которое первоначально null
. IdRequired - это настраиваемое ограничение, которое ограничивает свойство члена id объекта не равно null или -1.
Хотя, я могу изменить, чтобы использовать @NotNull на свойства идентификатора, а также добавить скрытый-вход, чтобы включить проверку на идентификатор:
class Principal_DTO {
...
@NotNull
@Min(0)
Long id;
}
...
<h:inputHidden id="principalId" value="${activeACL.principal.id}" />
<h:inputText id="principalLabel" ...
Но, таким образом, я не могу повторно использовать валидация сообщений. Дайте сообщение типа «Эта строка не должна быть нулевой», «Это значение не должно быть равно -1» пользователю кажется бессмысленным.