p:dataTable の選択リスナーについてアドバイスが必要です。私のビューは、北、左、中央のセクションを持つプライムフェイス拡張レイアウト (pe:layout) です。北がテーブル、左がメニューです。
左側のメニューは、選択したテーブル行のデータに対して別のビューを提供するため、行が変更された場合、ビュー全体を更新する必要があるという考え方です。(左側のメニューで選択したビューに応じて、これらは Bean backigOne、2、および 3 によってサポートされ、一度にアクティブになるのは 1 つだけです)。
そこで、すべての Bean に対して、テーブルに複数の rowSelect イベントを使用することにしました。
<p:dataTable id="" var="wo" value="#{TableBacking.dataList}"
selection="#{TableBacking.selectedItem}" selectionMode="single" rowKey="#{wo}">
<p:ajax event="rowSelect" listener="#{backingOne.tableChangeListnener}"
update="..." disabled="#{leftMenuBacking.selection != "ONE" />
<p:ajax event="rowSelect" listener="#{backingTwo.tableChangeListnener}"
update="..." disabled="#{leftMenuBacking.selection != "TWO"/>
<p:ajax event="rowSelect" listener="#{backingThree.tableChangeListnener}"
update="..." disabled="#{leftMenuBacking.selection != "THREE" />
...
</p:dataTable>
これはうまく機能し、常に leftMenuBacking で 1 つの項目が選択されるため、一度に 1 つの ajax イベントのみが有効になります。 ただし、次の宣言により、すべての backingOne、backingTwo、および backingThree Bean が常に初期化されるという問題があります。
listener="#{backingXXX.tableChangeListnener}"
そして私の場合、初期化にはコストがかかります:((時間的に)
より良い設計のヒントが必要なため、機能は同じですが、現在選択されている (または無効な ="#{leftMenuBacking.selection != "ONE" の意味で有効になっている) メニューのバッキング Bean のみが初期化されます。他にはありませんか?
どうもありがとう。
Magnus Tengdahlのコメントに基づくEDIT 1 :
leftmenu の選択ごとに異なるページがあります。ページ backingOne.xhtml は次のようになります。
<ui:composition template="/publicResources/templates/gdfoxTemplate.xhtml">
<ui:define name="title">GDFox | Similar Problems</ui:define>
<!-- North contains the section with table that produces rowSelect event as described above -->
<ui:define name="north">
<ui:include src="currentWorkload.xhtml" />
</ui:define>
<!-- Contains the left munu, uses p:menu widget-->
<ui:define name="west">
<ui:include src="leftmenu.xhtml" />
</ui:define>
<!-- center view based on BackingOne bean-->
<ui:define name="center">
....
</ui:define>
</ui:composition>
したがって、基本的に、左側のメニューのすべての選択は異なる URL にあります (backinOne/Two/Three.xhtml と呼びましょう。それらはすべて、北と西のセクションを共有し、独自のセンターを定義します。
これが、そのテーブルに 3 つを使用する必要がある理由です - すべての可能なビューに変更を反映するために (時間内に選択されるのは 1 つだけですが)。私は、1人の聞き手が私の問題を解決してくれるとは思っていません (== 私はまだ見ていません)。あなたのアイデアがうまくいくと確信しているなら、もう少し詳しく説明していただけますか?