Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何访问primefaces树中的当前树节点(以标记或编程方式),而不绑定到托管bean中的UI组件?_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Jsf 如何访问primefaces树中的当前树节点(以标记或编程方式),而不绑定到托管bean中的UI组件?

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

我将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="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