受到考虑动态表渲染的文章的启发(感谢 BalusC),我终于在稍早之前得到了我想要的确切结果。这给出了非常完美的结果,因为我可以控制每一列尊重业务逻辑要求的行为。但是,如果该表是我正在进行一些动态绑定实验的实验性“静态”页面的一部分,那就太酷了。
一旦我不得不将这些想法合并到现有代码中(或多或少愚蠢地对动态表达式一无所知),我就面临以下问题:动态绑定在页面加载期间似乎只工作一次. 好的,我认为我缺少将动态绑定 bean 和“主”页面 bean 分开(控制用户操作,例如用户单击树节点)。
我当前页面的一个简化实例如下(假设你在左边有一棵树,当你点击一个树节点时,你必须得到另一个数据表 [PrimeFaces used]):
一棵树,表格选择器(非常完美)
<p:tree value="#{tableViewsPageBean.root}" var="node" dynamic="true" cache="false"
selectionMode="single" selection="#{tableViewsPageBean.selectedNode}">
<p:ajax event="select" listener="#{tableViewsPageBean.onNodeSelect}" update=":form:scene"/>
<p:treeNode id="treeNode">
<h:outputText value="#{node}"/>
</p:treeNode>
</p:tree>
一旦用户单击上面的树节点,就会动态呈现的表
<h:panelGroup id="scene">
...
<h:panelGroup binding="#{dynamicDataTableBean.dataTableGroup}"/>
</h:panelGroup>
被tableViewsPageBean
定义为一个@ViewScoped
bean,并且dynamicDataTableBean
是一个@RequestScoped
bean(我不应该认为它可能有帮助——我只是有一个想法)。
但是,对我来说,在页面加载期间仅请求一次以下代码:
public HtmlPanelGroup getDataTableGroup() { ... }
我不知道,但是是否可以强制执行此代码以重新绑定上面提到的面板组中的组件而无需重新加载页面?提前致谢。