2012-03-20 73 views
1

我正在使用Primefaces 3.0。我有單一的SelectionMode一個DataTable,如下所示:如何導航到onRowSelect上的另一個頁面

<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

您可以只用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

+0

謝謝BalucsC。你太好了,不僅僅是因爲你回答了我的問題,而是爲了承擔痛苦和幫助別人。是的,我在onRowSelect方法上無效,但我注意到它調用了構造函數兩次。所以我添加了String作爲返回參數,然後停止了這種行爲。我不確定它爲什麼會彎腰,我也不確定它爲什麼要調用構造函數兩次,因爲我在調試模式下調用了這個構造函數。我相信你可以解釋。非常感謝。 – Peter 2012-03-20 11:57:10

+0

嗨BalusC,請忍受我的無知。我不知道如何發送我的代碼與評論,所以我只是想在這裏解釋。一切工作正常,這是在onRowSelect方法,除了它打開一個文件下載更多詳細信息而不是加載該頁面的Dialouge框。如果你願意,我可以在新帖子後發佈我的代碼。另外,我仍然需要f ViewParm在我的MoreDeatl xhtml中?謝謝。 – Peter 2012-03-20 14:36:01

+0

我的答案中的示例假定您已將'FacesServlet'映射爲* .xhtml'的URL模式。如果您已將其映射到不同的網址格式,例如'* .jsf',那麼您當然應該相應地更改重定向網址。例如。 'MoreDetai.jsf'而不是'MoreDetail.xhtml'(或者更好,將URL模式更改爲* .xhtml',這樣你就不需要擺弄虛擬URL)。 – BalusC 2012-03-20 14:38:00

相關問題