如何将 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>
两条建议:
- 而不是使用
Rnode.getChildren().add(new DefaultTreeNode(reportName));
,我会使用 new DefaultTreeNode(reportName, RNode)
。
- 要使叶子成为CommandLink,您需要条件语句。因此,您可以使用
nodeVar
或使用 属性 来标记对象是否为子对象。
我正在生成 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>
两条建议:
- 而不是使用
Rnode.getChildren().add(new DefaultTreeNode(reportName));
,我会使用new DefaultTreeNode(reportName, RNode)
。 - 要使叶子成为CommandLink,您需要条件语句。因此,您可以使用
nodeVar
或使用 属性 来标记对象是否为子对象。