Я работаю над формой поиска клиентов в базе данных.Эта форма фактически разделена на две формы: скажем, простой поиск и расширенный поиск .
Я могу выбрать расширенный поискпоиск, нажав на соответствующую кнопку-переключатель.Когда я нажимаю переключатель, состояние моего компонента поддержки меняется с SimpleSearchState на AdvancedSearchState ( Шаблон состояния ).
Здесьявляется базовым компонентом для моей формы:
public class SearchContextBean {
/**
* Injected beans
*/
@ManagedProperty(value = "#{simpleSearchStateBean}")
private SimpleSearchStateBean simpleSearchStateBean;
@ManagedProperty(value = "#{advancedSearchStateBean}")
private AdvancedSearchStateBean advancedSearchStateBean;
/**
* State
*/
private SearchState searchState = simpleSearchStateBean;
/**
* Properties, validations.
*/
@NotEmpty(groups={SimpleSearchValidationGroup.class})
private String name;
@Size(max=18, groups={AdvancedSearchValidationGroup.class})
private String firstName;
...
}
Итак, у меня есть свойство name , которое я хочу сделать обязательным для простого поиска.С другой стороны, я бы хотел, чтобы свойство firstName проверялось по размеру только для расширенного поиска.
Вот фрагмент моей страницы .xhtml:
<h:inputText name="name" id="name"
value="#{cc.attrs.searchContextBean.name}">
<f:validateBean
validationGroups="package.to.my.SimpleSearchValidationGroup" />
</h:inputText>
<h:inputText name="firstName" id="firstName"
value="#{cc.attrs.searchContextBean.firstName}">
<f:validateBean
validationGroups="package.to.my.AdvancedSearchValidationGroup" />
</h:inputText>
Я пытался реализовать Hibernate's GroupSequenceProvider без успеха: переопределенный метод getValidationGroups
всегда получал значение null вместо моего объекта bean.И затем, даже если я изменил последовательность групп, возвращая разные списки классов групп проверки, это ничего не изменило в проверке моей веб-страницы.
Проблема в том, что я не могу поставить отключенным атрибут в моем f: validateBean , который устанавливается в соответствии с состоянием моего SearchContextBean, потому что по некоторым причинам я не могу перерисовать форму (мне нужно скрыть / отобразить контейнеры сообщений об ошибках в соответствии с EL #{name.valid}, которые остаются в true , если возникает ошибка, даже после повторного рендеринга).
Я надеялся, что есть более чистое решение для проверки той или иной группы.
Заранее спасибо за любую помощь.