如何获取PrimeFaces树节点的根?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取PrimeFaces树节点的根?相关的知识,希望对你有一定的参考价值。

我有一个html页面从控制器获取TreeNode。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:composition>
    <pa:panelTree styleClass="corps-grade-list"
        treeContent="#{affectationController.getDossierEnBrefAffectations()}"
        rendered="#{agentModele.estMigre}" />
</ui:composition>
</html>

这样,affectationController.getDossierEnBrefAffectations()是一个返回这个树节点的函数。我想得到这棵树的根节点。

我尝试使用treeContent="${affectationControleur.consulterDossierEnBrefAffectations.children[0]}",因为TreeNode类具有getChildren函数。然而,它不是EL的正确语法。

答案

如果您尚未扩展DefaultTreeNode类或实现接口,请执行此操作。现在您只需将此方法添加到树节点实现中:

public TreeNode getRoot() {
  if (getParent() == null) {
    return this;
  }
  TreeNode root = getParent();
  while (root.getParent() != null) {
    root = root.getParent();
  }
  return root;
}

这允许您使用:#{bean.treeNode.root}

如果您无法更改模型,可以在bean中添加类似的东西:

public TreeNode getRoot(TreeNode node) {
  if (node.getParent() == null) {
    return node;
  }
  TreeNode root = node.getParent();
  while (root.getParent() != null) {
    root = root.getParent();
  }
  return root;
}

这允许您使用:#{bean.getRoot(treeNode)}

以上是关于如何获取PrimeFaces树节点的根?的主要内容,如果未能解决你的问题,请参考以下文章

Extjs Treepanel - 如何删除树的根

easyui 获取树的平级根节点

jsTree:如何将选定节点的 ID 获取到 jsTree 中的根节点?

vue3的根节点

分类树模型中的根节点错误

如何获取jtree中根节点的所有子节点?