最后,当数据表结构根据外部源定义时,我已经管理了如何在 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
提前致谢。非常感谢您的帮助。