gpt4 book ai didi

jsf - 如何在不绑定(bind)到托管 bean 中的 UI 组件的情况下访问 primefaces 树中的当前 TreeNode(以标记或编程方式)?

转载 作者:行者123 更新时间:2023-12-03 21:09:02 30 4
gpt4 key购买 nike

我正在使用 Primefaces 3.4.1 和 Oracle 的 JSF 2.2 实现的 2.2.0-m05 里程碑版本。我还使用 Spring 3.1 进行依赖注入(inject)和一些 AOP。

我正在尝试使用 Primefaces 树组件来显示逻辑过滤规则的组合(并允许用户在组合结构内的任何深度创建组合/叶节点)。

示例复合过滤器:

((location = 'cal') AND (description contains 'test')) OR (project = 'someProject')

示例树标记:

<p:tree value="#{form.rootComponent}" var="filterComponent" animate="true">

<p:treeNode type="composite">
<!-- some composite specific components -->
</p:treeNode>

<p:treeNode type="leaf">
<!-- some leaf specific components -->
</p:treeNode>

</p:tree>

尽管元素上的“value”属性接受根 TreeNode(从托管 bean 中检索),但“var”属性指向当前树节点中存在的实际数据,而不是节点本身。 我想要一种访问当前树节点的方法,而不是它的包装数据,无论是标记还是编程 .

如果我可以在标记中访问它,我可以将它作为方法参数传递给托管 bean。如果无法在标记中访问它,我可以通过模型对象获得直接的编程访问吗? (大概是通过访问底层树模型?)。

我知道您可以使用解析为基础 DataModel 的表达式而不是直接将数据集合作为 h:dataTable 的“值”,但我相信您只能将根节点本身与 p:tree 一起使用。

我可以在包装的数据对象中包含对树节点的引用,但如果可能的话,我真的宁愿避免讨厌的循环引用。

在没有更好的选择的情况下,我尝试使用“绑定(bind)”属性将 p:tree 元素直接绑定(bind)到托管 bean 中的 Tree 实例(Tree 是 p:tree 的 UIComponent 类),这样我就可以访问当前节点通过 getTreeNode() 方法,但考虑到托管 bean 和 View 组件之间的生命周期不匹配,我更愿意避免这种情况。它不能按原样完美运行,我认为必须有一个更好、更简单的解决方案。

我还尝试使用 jsf 数据表 - 使用嵌套数据表来处理复合部分 - 但考虑到在 jsf 标记中创建条件递归结构的困难,我决定反对它(我相信在 View 构建时不会评估“rendered”属性所以很难避免无限递归)。

澄清一下,我只对包含“var”引用的数据的当前树节点感兴趣,而不是用户当前选择的节点。

最佳答案

PF Lead 刚刚在 PF 5.1.10/5.2 中为 p:treeTable 添加了一个名为“nodeVar”的新属性(不知道是否包含 p:tree)。此功能将允许获取实际的 TreeNode 而不是它的数据。因此,现在可以对节点本身执行额外的方法调用,例如 TreeNode.isLeaf()。

关于jsf - 如何在不绑定(bind)到托管 bean 中的 UI 组件的情况下访问 primefaces 树中的当前 TreeNode(以标记或编程方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13476824/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com