我想在我的网络应用中实现一个搜索框。 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's post和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>