JSF2.2从一个视图传递参数到另一个视图



我正在开发一个JSF应用程序,它的主页有一个搜索输入字段,其中有一个提交搜索的命令按钮。一旦用户点击搜索按钮,它应该搜索并显示结果页面。我有问题通过参数从主视图到结果视图。我的代码如下:

<h:form id="searchForm">
<p:inputText styleClass="enterSearch" size="50" value="#{searchController.searchText}" onkeypress="if (event.keyCode === 13) {document.getElementById('searchForm:submitSearch').click();
    return false;
 }"/>
<p:commandButton id="submitSearch" styleClass="enterSearch" value="Search" label="Search" action="#{searchController.search(searchController.searchText)}" />
</h:form>    

Bean

@ManagedBean(name = "searchController")
@ViewScoped
public class SearchController implements Serializable {
.....
public String search(String query) {            
//What goes here?   Use FacesContext Attributes?  
return "searchResults";
}
...

搜索方法返回searchResults.xhtml页面此页面显示搜索结果。如何将搜索查询传递给searchResults视图并初始化searchResults的支持bean ?有什么想法吗?

如果我理解正确,SearchController实际上应该将结果(而不是查询)传递给searchResults视图。我这样做的方式是通过将search方法移动到结果页面:

searchResults.xhtml:

<f:metadata>
  <f:viewParam name="searchQuery" value="#{searchController.searchText}" />
  <f:viewAction listener="#{searchController.update()}" />
</f:metadata>
<h:dataTable value="#{searchController.results}">
  <!-- your data -->
</h:dataTable>

SearchController.java:

@ManagedBean
@ViewScoped
public class SearchController implements Serializable {
    private String searchText; // +getter/setter
    private List<String> results; // +getter
    public void update() {            
        results = Arrays.asList(new String[] {"My", "Results"});
    }
}

现在您应该能够简单地将搜索表单指向searchResults站点:

<h:inputText value="#{searchController.searchText}" />
<h:commandLink action="searchResults" value="Search" />

请注意,这是一种hack,所以让我建议替代:

  1. 保持在同一页面。由于您可以有条件地呈现元素,因此只需使用rendered="#{not empty searchController.results}"隐藏结果显示。那么容易。

  2. 不要使用POST,而是使用GET。这正是这个问题的问题所在(以及更多)。

相关内容

  • 没有找到相关文章

最新更新