最後に、データテーブル構造が外部ソースに従って定義されている場合に、JSFでDOMのようなアプローチを使用して真の動的テーブルを構築する方法を管理しました。(動的な列を持つDataTableは、まさに私が必要としているものです)基本的に、次のコードで十分です。
<p:layoutUnit position="west">
<!-- 2 -->
<p:tree value="#{tableViewsPageBean.root}" var="node" dynamic="true" cache="false"
selectionMode="single" selection="#{tableViewsPageBean.selectedNode}">
<!-- 3 -->
<p:ajax event="select" listener="#{tableViewsPageBean.onNodeSelect}"/>
<p:treeNode id="treeNode">
<h:outputText value="#{node}"/>
</p:treeNode>
</p:tree>
</p:layoutUnit>
<p:layoutUnit position="center">
<h:panelGroup>
<h:panelGroup rendered="#{tableViewsPageBean.isRegeneratable}">
<p:commandButton value="#{fu:$(languageBean, 'REGENERATE')}"
action="#{dynamicTableViewBean.regenerate}"/>
</h:panelGroup>
<!-- 1 -->
<h:panelGroup binding="#{dynamicTableViewBean.dataTableGroup}"/>
</h:panelGroup>
</p:layoutUnit>
しかし、私が現在解決する方法がわからない問題があります。上記のコードを見ると、バッキングBeanメソッドのフローを表すコメントに数値マーカーが表示されています。
binding="#{dynamicTableViewBean.dataTableGroup}"
selection="#{tableViewsPageBean.selectedNode}"
listener="#{tableViewsPageBean.onNodeSelect}"
h:panelGroup
ユーザーがツリービューで選択を変更した後に、のバインディングを定義する必要があるため、この順序は私には適していません。簡単に言うと、最適なフローは次のとおりです。
selection="#{tableViewsPageBean.selectedNode}"
(以前は2)listener="#{tableViewsPageBean.onNodeSelect}"
(以前は3)binding="#{dynamicTableViewBean.dataTableGroup}"
(以前は1)
そのため、ツリーでのユーザーの選択を尊重するデータテーブルコンポーネントを構築できました。それで、それは上記のメソッドを実行する別の順序を強制する方法ですか?使用したPrimeFacesバージョン:3.2
前もって感謝します。あなたの助けは大歓迎です。