如何导航到onRowSelect上的另一个页面

时间:2012-03-20 04:06:30

标签: jsp jsf

我正在使用Primefaces 3.0。我有一个带selectionMode单的数据表,如下所示:

 <p:dataTable  id="paySumm" var="PSummRow" 
 value="#{beanPySummary.PySummariesModel}" 
 selection="#{beanPySummary.selectedPySummary}" selectionMode="single" paginator="true" 
 rows="15" paginatorTemplate="{RowsPerPageDropdown}  {FirstPageLink} {PreviousPageLink} 
 {CurrentPageReport} {NextPageLink}"  rowsPerPageTemplate="10,15,25,35" >

 <p:ajax event="rowSelect" listener="#{beanPySummary.onRowSelect}" />

我在方法onRowSelect中有一些业务逻辑,然后我导航到另一个页面。

public String onRowSelect(SelectEvent event) {
   ......
   ConfigurableNavigationHandler configurableNavigationHandler =
   getCurrentInstance().getApplication().getNavigationHandler(); 
   configurableNavigationHandler.performNavigation("MoreDetail?faces-redirect=true
   return  "";

我想通过includeViewParam将一些数据作为参数传递给MoreDeatils。我可以在MoreDeatils.xhtml中将它们定义为f:ViewParam。我不确定是否需要使用ManagedProperty注释,同时将这些参数定义为我的数据表页面上的隐藏字段。在这里,我需要建议和指示。

谢谢, 彼得

1 个答案:

答案 0 :(得分:1)

您只需按ExternalContext#redirect()发送重定向即可。您要发送的数据需要在URL的查询字符串中设置。

public void onRowSelect(SelectEvent event) throws IOException {
    String field1 = URLEncoder.encode(this.field1, "UTF-8");
    String field2 = URLEncoder.encode(this.field2, "UTF-8");
    String field3 = URLEncoder.encode(this.field3, "UTF-8");
    String url = "MoreDetail.xhtml?field1=" + field1 + "&field2=" + field2 + "&field3=" + field3;
    FacesContext.getCurrentInstance().getExternalContext().redirect(url);
}

请注意,(ajax)动作侦听器方法应该返回void