我正在生成Primefaces树组件作为
root = new DefaultTreeNode("Root", null);
List<String> categories = reportService.getCategories();
for (String categoryName : categories) {
TreeNode Rnode = new DefaultTreeNode(categoryName, root);
List<String> reportNames = reportService
.getReportNames(categoryName);
for (String reportName : reportNames) {
Rnode.getChildren().add(new DefaultTreeNode(reportName));
}
}
Xhtml看起来像这个
<p:tree value="#{reportManagedBean.root}" var="node">
<p:treeNode>
<p:outputLabel value="#{node}"/>
</p:treeNode>
</p:tree>
如何使叶节点仅为CommandLink,其余为OutputLabel?
您可以使用nodeVar
属性访问当前TreeNode
实例,并确定当前节点是否为叶:
<h:form>
<p:tree value="#{reportManagedBean.root}" var="data" nodeVar="node">
<p:treeNode>
<h:outputLabel value="#{data}"
rendered="#{not empty node.children}" />
<h:commandLink value="Do something: #{data}"
rendered="#{empty node.children}" />
</p:treeNode>
</p:tree>
</h:form>
两个建议:
- 与其使用
Rnode.getChildren().add(new DefaultTreeNode(reportName));
,不如使用new DefaultTreeNode(reportName, RNode)
- 要使叶子成为CommandLink,您需要条件语句。因此,如果对象是子对象,则可以使用
nodeVar
或使用一个属性进行标记