我试图在 JSF 中显示一棵树,而不用硬编码我想要显示的树的深度。也许对于一种配置,我只想显示叶子,也许对于另一种配置,我想显示按节点上一层的节点分组的叶子,等等。因此,对于一种配置,它可能是:
- 问题 1
- 问题2
- 问题 3
- 问题 4
而对于另一种配置,相同的底层数据结构可能会产生:
- 第一类:
- 问题 1
- 问题2
- 第 2 类:
- 问题 3
- 第三类:
- 问题 4
假设第三个配置按超类别对类别进行分组,等等。
如果节点有更多的孩子,我尝试制作一个递归调用自身的复合组件。我这样做是通过<ui:fragment rendered="#{node.hasChildren}">
- 惊喜!-- 这导致了无限循环和堆栈溢出。
该项目已经安装了 PrimeFaces,所以我正在查看 PrimeFacesTree
和TreeNode
. 但这感觉不太对。我不希望树节点在用户界面中可扩展。我希望一切都得到充分扩展。我还没有深入这个兔子洞,所以我怀疑可能有一种方法可以实现这一点Tree
,但感觉就像我违背了它的构建目的。
有什么好的方法解决这个问题?
编辑: 我正在尝试使用 <tree> 和 <treeNode>,但它不起作用。我的代码如下所示:
<p:tree value="#{cc.attrs.classification}" var="child">
<p:treeNode>
<ui:fragment rendered="#{child.childCount > 0}">
[do node stuff]
</ui:fragment>
<ui:fragment rendered="#{child.childCount == 0}">
[do leaf stuff]
</ui:fragment>
</p:treeNode>
</p:tree>
...在哪里classification
实现TreeNode
接口。这会导致控制台出现错误,抱怨child
属于 String 类型,因此无法执行我要求的任何有趣的事情。我究竟做错了什么?