我想在我的网络应用程序中实现一个搜索框。JSF<h:form>
应该将我重定向到 products.xhtml?search=somestring。它应该与以下 HTML 相同:
<form action="products.xhtml" method="GET">
<input type="text" name="search" />
<input type="submit" value="Submit" />
</form>
我遇到的类似问题的所有解决方案都是在没有查询字符串的情况下重定向到另一个页面
<h:form>
<h:inputText value="#{product.searchString}"/>
<h:commandButton value="Submit" action="products?faces-redirect=true&includeViewParams=true"/>
</h:form>
.
<h:form>
<h:inputText valueChangeListener="#{product.searchStringChanged}" />
<h:link value="Submit" outcome="products">
<f:param name="search" value="#{product.searchString}" />
</h:link>
</h:form>
OR 构建查询字符串但重定向到同一页面。不使用纯 HTML 的原因是为了保留 JSF 会话管理的好处。
编辑
在BalusC 的帖子和https://blogs.oracle.com/enterprisetechtips/entry/post_redirect_get_and_jsf的帮助下,我想出了以下解决方案:
<f:metadata>
<f:viewParam name="search" value="#{product.search}" />
</f:metadata>
<h:form>
<h:inputText value="${product.search}"/>
<h:commandLink action="products?faces-redirect=true&includeViewParams=true" value="Search"/>
</h:form>