Jsf 如何访问primefaces树中的当前树节点(以标记或编程方式),而不绑定到托管bean中的UI组件?
我将Primefaces 3.4.1与Oracle JSF 2.2实现的2.2.0-m05里程碑构建一起使用。我还使用Spring3.1进行依赖注入和一些AOP 我试图使用Primefaces树组件来显示逻辑筛选规则的组合(并允许用户在组合结构中的任何深度创建组合/叶节点) 复合过滤器示例: ((位置='cal')和(描述包含'test'))或(项目='someProject') 树标记示例:Jsf 如何访问primefaces树中的当前树节点(以标记或编程方式),而不绑定到托管bean中的UI组件?,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我将Primefaces 3.4.1与Oracle JSF 2.2实现的2.2.0-m05里程碑构建一起使用。我还使用Spring3.1进行依赖注入和一些AOP 我试图使用Primefaces树组件来显示逻辑筛选规则的组合(并允许用户在组合结构中的任何深度创建组合/叶节点) 复合过滤器示例: ((位置='cal')和(描述包含'test'))或(项目='someProject') 树标记示例: <p:tree value="#{form.rootComponent}" var="filte
<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”属性接受根树节点(从托管bean检索),但“var”属性指向当前树节点中的实际数据,而不是节点本身我想要一种方法来访问当前树节点,而不是它的包装数据,无论是在标记中还是以编程方式
如果我可以在标记中访问它,我可以将它作为方法参数传递给托管bean。如果在标记中无法访问它,我可以通过模型对象获得直接编程访问吗?(大概是通过访问底层树模型?)
我知道您可以使用解析为底层数据模型的表达式,而不是直接将数据收集作为h:dataTable的“值”,但我相信您只能将根节点本身与p:tree一起使用
我可以在包装的数据对象中包含对树节点的引用,但如果可能的话,我宁愿避免讨厌的循环引用
在没有更好的替代方法的情况下,我尝试使用“binding”属性将p:tree元素直接绑定到托管bean中的树实例(tree是p:tree的UIComponent类),这允许我通过getTreeNode()方法访问当前节点,但考虑到托管bean和视图组件之间的生命周期不匹配,我更愿意避免这种情况。它并没有像现在这样完美地工作,我想一定有一个更好、更简单的解决方案
我还尝试使用一个jsf数据表(带有嵌套的数据表来处理复合部分),但考虑到在jsf标记中创建条件递归结构的困难,我决定不使用它(我相信“rendered”属性在视图构建时不会计算,因此很难避免无限递归)
为了澄清,我只对包含“var”所指数据的当前树节点感兴趣,而不是用户当前选择的节点 树组件中有一个名为“选择”的属性。您只需要提供对托管bean方法的引用 例如,在xhtml中,按以下方式定义属性: selection="#{myManagedBean.selectedNode}" selection=“#{myManagedBean.selectedNode}”
根据上述属性的定义,您必须在引用org.primefaces.model.TreeNode实例的托管bean中提供常用的setter和getter方法。PF Lead刚刚为p:treeTable(如果包括p:tree,则不知道)添加了一个名为“nodeVar”的新属性,如PF 5.1.10/5.2所示。此功能将允许获取实际树节点而不是其数据。因此,现在可以对节点本身执行额外的方法调用,例如TreeNode.isLeaf()。如果不选择节点,如何获取当前树节点?我不明白你的问题。你试过在标记中使用#{component}吗?应该解析为当前组件的,在您的示例中应该是treeNode