7

私はJSFとPrimefacesを使用していますが、質問は次のとおりです。

文字列のリスト(スペースで区切られている)を含むビューパラメータを受け取るページ(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

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

私はこれをやろうとしています:

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

またはこれ:

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

ここで、bean2には、オブジェクトが選択されたselectedItems[]があります。

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

何か助けはありますか?前もって感謝します。

4

1 に答える 1

8

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

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

最新の選択を提供する別の方法は、アクションメソッドを使用して、そこにリダイレクトURLを作成することです。

例えば

<p:commandButton action="#{bean2.navigateWithSelection}" />

そしてあなたの豆で:

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

コメントによると、bean2がページに関する知識を持たない一般的なBeanである場合は、ターゲットページをパラメータとして渡すことができます。

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

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

public String navigateWithSelection(String target) {
    return target + "?faces-redirect=true&" + convertSelectedItemsToString();
}
于 2012-09-08T21:48:21.577 に答える