【问题标题】:Binding multiple components to one instance in backing bean (Primefaces Tree)将多个组件绑定到支持 bean 中的一个实例(Primefaces 树)
【发布时间】:2026-01-22 13:50:01
【问题描述】:

我希望能够在我的页面上的 2 个位置拥有 Primefaces 树。原因是我想让具有相同数据的两棵树具有完全相同的状态-扩展相同的节点等。我尝试将两个实例绑定到支持 bean 中的相同值,但这只会导致其中一个呈现。我做错了吗?这应该以不同的方式解决吗?

相关问题(要求略有不同)指出不应该这样做,但如果不这样做 - 应该怎么做?

JSF component disappears after binding

编辑 1

我注意到我可以使用 'value=' 轻松共享选择值,但真正的问题是共享哪些节点已展开,哪些节点已折叠。我不知道这是存储在服务器上,还是完全可以存储在服务器上。

【问题讨论】:

    标签: jsf binding jsf-2 primefaces components


    【解决方案1】:

    我尝试将两个实例绑定到支持 bean 中的相同值,但这会导致其中只有一个呈现。我做错了吗?

    这绝对是错误的。每个组件binding 应解析为一个唯一请求范围的属性,该属性不被任何其他组件共享,也不会比请求范围更长。


    应该以不同的方式解决这个问题吗?

    将它们绑定到不同的属性。如果您想要一个动态可扩展的属性,请使用Map<String, UIComponent>

    private Map<String, UIComponent> components = new HashMap<String, UIComponent>();
    
    // Getter (no setter necessary).
    

    可以用作

    <x:someComponent binding="#{bean.components.foo}" />
    <x:someComponent binding="#{bean.components.bar}" />
    <x:someComponent binding="#{bean.components.baz}" />
    

    【讨论】:

    • 谢谢。我实际上通过使树动态并共享相同的 selectedNode 来解决我的问题。绑定到同一个变量绝对不是这样做的方法;)
    最近更新 更多