Как сделать лист компонента Primefaces Tree как Commandlink - PullRequest
0 голосов
/ 17 февраля 2020

Я генерирую компонент 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));
        }
    }

, а X html выглядит следующим образом

    <p:tree value="#{reportManagedBean.root}" var="node">
        <p:treeNode>
            <p:outputLabel value="#{node}"/>
        </p:treeNode>
    </p:tree>

Как сделать только листовой узел как CommandLink, а остальное как OutputLabel

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы можете использовать атрибут 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 голос
/ 20 февраля 2020

Два предложения:

  1. Вместо того, чтобы использовать Rnode.getChildren().add(new DefaultTreeNode(reportName));, я бы использовал new DefaultTreeNode(reportName, RNode).
  2. Чтобы сделать лист как CommandLink, вам нужен условный оператор. Таким образом, вы можете использовать nodeVar или иметь свойство для отметки, если объект является дочерним.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...