Проверка различных групп проверки JSF 2.0 - PullRequest
2 голосов
/ 29 декабря 2011

Я работаю над формой поиска клиентов в базе данных.Эта форма фактически разделена на две формы: скажем, простой поиск и расширенный поиск .

Я могу выбрать расширенный поискпоиск, нажав на соответствующую кнопку-переключатель.Когда я нажимаю переключатель, состояние моего компонента поддержки меняется с 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 , если возникает ошибка, даже после повторного рендеринга).

Я надеялся, что есть более чистое решение для проверки той или иной группы.

Заранее спасибо за любую помощь.

1 Ответ

2 голосов
/ 29 декабря 2011

Я никогда не использовал групповую проверку.Однако для меня код будет намного понятнее, если я разделю Простой поиск и Расширенный поиск на две разные формы, подобные этой:

<h:selectBooleanCheckbox id="isSimple" value="#{searchBean.simple}">
   <f:ajax render="searchPanel" />
</h:selectBooleanCheckbox>

<h:panelGroup id="searchPanel">
   <h:form rendered="#{searchBean.simple}" id="simpleSearch>
      <h:inputText id="name" value="#{simpleSearchBean.name}" />
      <h:inputText id="age"  value="#{simpleSearchBean.age}" />

      <h:commandButton id="simpleButton" action="#{simpleSearchBean.search}" value="Search" />
   </h:form>

   <h:form rendered="#{not searchBean.simple}" id="advancedSearch>
      <h:inputText id="firstname" value="#{advancedSearchBean.firstName}" />
      <h:inputText id="age"       value="#{advancedSearchBean.age}" />

      <h:commandButton id="advancedButton" action="#{advancedSearchBean.search}" value="Search" />
   </h:form>
</h:panelGroup>

@ManagedBean
@ViewScoped
public class SearchBean {
   private boolean simple;
}

Затем вы можете выполнить проверку отдельно.Просто мои 2 цента!Надеюсь, что это поможет вам:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...