Регистр параметров @PostConstruct и commandButton / commandLink - PullRequest
0 голосов
/ 23 декабря 2011

Мне интересно, существует ли общий шаблон для следующего сценария.

Допустим, у меня есть одна страница JSF, подкрепленная одним компонентом области запроса.Я хочу получить все строки данных из таблицы базы данных, когда пользователь заходит на эту страницу.Эта же страница JSF содержит форму для предоставления критериев запроса.Когда пользователь предоставляет критерии запроса и отправляет форму, я хочу также отобразить результат на той же странице.

Подходящим местом для извлечения всех строк при вводе страницы является метод @PostConstruct.Это хорошее место, чтобы сделать это, поскольку дополнительные (введенные) параметры запроса уже доступны здесь и могут использоваться в запросе.Однако параметры, отправленные из формы, пока недоступны.К ним можно получить доступ в методе действия.

Если пользователь запрашивает таблицу базы данных, используя критерии формы, база данных будет запрашиваться дважды в этом случае.Бин в области запроса будет воссоздан, и метод @PostConstruct, извлекающий все строки, будет вызван до того, как метод действия формы извлечет то, что хочет пользователь.

Конечно, я мог бы перенаправить результат формы на другую страницу JSF, поддерживаемуюдругой компонент с запросом БД только в методе действия.Но есть ли способ выполнить выборку только того, что необходимо с одной страницей JSF и одним управляемым компонентом?

1 Ответ

3 голосов
/ 23 декабря 2011

То, что вы должны использовать, является комбинацией управляемого компонента ViewScoped и движка ajax. Вы правы в использовании метода @PostConstruct для извлечения всех начальных строк таблицы данных. Любые дальнейшие запросы из вашей формы запроса больше не будут вызывать этот метод. Вместо этого вам нужно только сделать ajax-вызов, чтобы отсортировать записи в вашей таблице данных и обновить их в конце вызова. Это было бы что-то вроде этого:

<h:dataTable id="myTable">
   ...
</h:dataTable>

<h:form>
   ...
   <h:commandButton actionListener="#{viewScopedBean.sortEntries}">
       <f:ajax render="myTable" execute="myForm" />
   </h:commandButton>
</h:form>
...