如何将 Primefaces Tree 组件的叶子制作为 Commandlink

How to make leaf of Primefaces Tree component as Commandlink

我正在生成 Primefaces Tree 组件作为

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>

两条建议:

  1. 而不是使用 Rnode.getChildren().add(new DefaultTreeNode(reportName));,我会使用 new DefaultTreeNode(reportName, RNode)
  2. 要使叶子成为CommandLink,您需要条件语句。因此,您可以使用 nodeVar 或使用 属性 来标记对象是否为子对象。