2012-09-08 15 views
6

から私は、JSFとPrimefacesを使用していて、私の質問は:JSF ViewParamコマンドボタン

:文字列のリスト(スペース区切り)でビューのparamをrecive私はページ(page1.jsf)を持っている

<f:metadata> 
<f:viewParam name="list" value="#{bean1.list}" converter="listConverter"/> 
</f:metadata> 

listConverterは、文字列を個々の単語のリストに変換します。 URLを使ってページにアクセスすると(例:page1.jsf?list = word1 word2 word3)、すべて正常に動作します!

今は別のページ(page2.jsf)を使ってそのリストを作成しようとしています。私はこの例以下、PrimefaceのDataTableを使用してい 用語の:http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf可能tomake私が欲しい

をユーザーに複数の行(チェックボックスPrimeface例)を選択し、page1.jsfにリダイレクトされますボタンを押すと、また、選択された項目のリストをパラメータとして渡します(たとえば、Primefaceショーケースの例を使用して、選択した車種のリストを渡します)。

私はしようとしています彼:

<p:commandButton action="page1?faces-redirect=true&amp;includeViewParams=true" > 
<f:attribute name="list" value="#{bean2.convertSelectedItemsToString()}" /> 
</p:commandButton> 

またはこの:

bean2はselectedItemsの[]オブジェクトを選択した
<p:commandButton action="page1?faces-redirect=true&amp;includeViewParams=true" > 
<f:param name="list" value="#{bean2.convertSelectedItemsToString()}" /> 
</p:commandButton> 

言うまでもなく...動作しません。

助けが必要ですか? ありがとうございます。

答えて

7

コマンドボタンは、リダイレクト先のURLを構成するために属性またはパラメータを使用しません。

この場合、通常h:commandLinkまたはオプションでh:outputLinkを使用しますが、ページが要求された時点のパラメータをそのままレンダリングすることに注意する必要があります。その後、ユーザーが選択内容に変更を加えた場合、それらはリンクに反映されません。

あなたに最新の選択肢を与える代替手段として、アクションメソッドを使用してそこにリダイレクトURLを作成しています。

など。

<p:commandButton action="#{bean2.navigateWithSelection}" /> 
あなたの豆で

そして:コメントを1として

public String navigateWithSelection() { 
    return "page1?faces-redirect=true&" + convertSelectedItemsToString(); 
} 

bean2ページについての知識を持たない一般的な豆であれば、あなたは、パラメータとしてターゲットページに渡すことができます。

<p:commandButton action="#{bean2.navigateWithSelection('page1')}" /> 

そして、あなたの豆で再び:

+0

一時的な解決策として、私は第2のアプローチを行った。しかし、私はそれが好きではありません。私のコントローラ(豆)が私の見解に大きく依存しているからです。私はjsfが私に良い解決策を提供すると思った。 – userk

+0

JSFでは、バッキングBeanは単一のビューを元に戻すように "想定されています"ので、バッキングBeanはビューに依存することができます。 'bean2じゃない。convertSelectedItemsToString'は既に特定のビューを表示していますか、またはそこに汎用のものを実行していますか?ジェネリックソリューションが必要な場合は、ページにパラメータとして渡すことができます。更新された回答をご覧ください。 –

+0

それは賢明な回避策です!私はそれをやろう!ありがとう。 – userk

関連する問題