2012-03-20 15 views
1

私はPrimefaces 3.0を使用しています。下図のように私は、単一のselectionModeとのデータテーブルを持っている: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); 
} 

アクションリスナメソッドはvoidを返すことになっている(アヤックス)ことに注意してください。

+0

ありがとうございましたBalucsC。あなたは私の質問に答えるだけでなく、痛みを抱き、他の人を助けるために偉大な人です。はい、私はonRowSelectメソッドでvoidを持っていましたが、私はそれがコンストラクタを2度呼び出すことに気付いていました。そこで、リターンパラメータとしてStringを追加し、そのように動作しなくなりました。私はなぜそれがひっくり返っているのか分かりませんし、どうして私がデバッグモードでそれをobserevedしたので、なぜそれがコンストラクタを2度呼び出すのか分かりません。私はあなたが説明できると確信しています。どうもありがとうございます。 – Peter

+0

こんにちはBalusC、私の無知で負担してください。私はどのように私のコードをコメントで送るのか分からないので、ここで説明しようとしています。 onRowSelectメソッドには、そのページを読み込むのではなく、MoreDetails用のファイルダウンロードダイアログボックスが開きますが、すべてがうまく動作します。あなたが望むなら私は新しい投稿の下に私のコードを投稿することができます。また、私はまだ私のMoreDeatl xhtmlにf ViewParmが必要ですか?ありがとう。 – Peter

+0

私の答えの例では、 '* .xhtml'のURLパターンに' FacesServlet'をマップしたと仮定しています。 '* .jsf'のような別のURLパターンにマップした場合は、それに応じてリダイレクトURLを変更する必要があります。例えば。 'MoreDetail.xhtml'の代わりに' MoreDetai.jsf'(あるいは、URLパターンを '* .xhtml'に変更することで、仮想URLを習得する必要はありません)。 – BalusC

関連する問題