Я написал веб-приложение для электронной коммерции с использованием Seam 2.2, JPA и JSF, которое, конечно же, содержит функцию поиска товаров.Для этого я создал класс SearchForm
, который содержит различные параметры, используемые для поиска (начальный индекс, максимальное количество результатов, 'и' условия, 'или' условия и т. Д.). У меня также естьвеб-действие - ProductSearchAction
- которое использует объект SearchForm
для извлечения записей из базы данных.Это выглядит примерно так:
@Name("searchForm")
@AutoCreate
@Scope(ScopeType.CONVERSATION)
public class SearchForm {
private int startIndex = 0;
private int maxResults = 20;
...
}
@Name("productSearchAction")
@AutoCreate
@Scope(ScopeType.CONVERSATION)
public class ProductSearchAction {
@In
private SearchForm searchForm = null;
@Out
private List<Products> products = null;
...
public void searchProducts() {
...
}
...
}
В моем JSF я отображаю список продуктов, заключенный в <h:form />
, с 2 <h:commandLink />
ссылками для перемещения вперед и назад по результатам.Поскольку я не создаю диалог для каждого поиска, я пытаюсь передать состояние объектам ProductSearchAction
и SearchForm
с помощью скрытых полей <h:inputHidden />
.На моей странице есть такие поля:
<h:form>
...
<h:inputHidden value="#{searchForm.maxResults}" />
<h:inputHidden value="#{searchForm.startIndex}" />
<h:inputHidden value="#{searchForm.andTerms}" />
...
<h:commandLink action="next" value="Next" />
<h:commandLink action="previous" value="Previous" />
</h:form>
Насколько я понимаю, <h:inputHidden />
состоит в том, что он будет заполнять соответствующие значения в SearchForm
, которые затем будут доступны для ProductSearchAction.searchProducts()
.Когда я просматриваю исходный код HTML, я вижу скрытые параметры, устанавливаемые в HTML.Однако, когда я нажимаю «далее» или «предыдущий», что приводит меня к действию searchProducts()
, ни одно из значений не устанавливается.
Не понимаю ли я, как работает <h:inputHidden />
?Что мне нужно сделать, чтобы передать эти значения моему поисковому действию?Есть ли лучший способ достичь моей цели?Это проблема объема шва?Я ДЕЙСТВИТЕЛЬНО благодарен за любую помощь, которую вы можете оказать.