The rich:recursiveTreeNodesAdaptor provides possibility to define data models and process nodes recursively.
Table 6.415. rich : recursiveTreeNodesAdaptor attributes
Attribute Name | Description |
---|---|
binding | The attribute takes a value-binding expression for a component property of a backing bean |
id | Every component may have a unique id that is automatically created if omitted |
included | This boolean expression is used to define which elements of both collections are processed |
includedNode | This boolean expression is used to define which elements are processed |
includedRoot | This boolean expression is used to define which elements are processed appling to "roots" collection |
nodes | Defines collection to use at the other (non-top) levels of iteration |
rendered | If "false", this component is not rendered |
roots | Defines collection to use at the top of iteration |
var | A request-scope attribute via which the data object for the current collection element will be used when iterating |
Table 6.416. Component identification parameters
Name | Value |
---|---|
component-type | org.richfaces.RecursiveTreeNodesAdaptor |
component-class | org.richfaces.component.html.HtmlRecursiveTreeNodesAdaptor |
component-family | org.richfaces.RecursiveTreeNodesAdaptor |
tag-class | org.richfaces.taglib.RecursiveTreeNodesAdaptorTag |
To create the simplest variant of rich:recursiveTreeNodesAdaptor on a page, use the following syntax:
Example:
...
<rich:recursiveTreeNodesAdaptor var="issue" root="#{project.root}" nodes="#{model.issues}">
...
<rich:treeNode>
<!-- node content -->
</rich:treeNode>
<!-- Others nodes -->
...
</rich:recursiveTreeNodesAdaptor>
...
Example:
import org.richfaces.component.html.HtmlRecursiveTreeNodesAdaptor;
...
HtmlRecursiveTreeNodesAdaptor myRecursiveTreeNodesAdaptor = new HtmlRecursiveTreeNodesAdaptor();
...
The typical variant of using:
...
<rich:tree adviseNodeOpened="#{treeModelBean.adviseNodeOpened}" switchType="client">
<rich:treeNodesAdaptor id="project" nodes="#{loaderBean.projects}" var="project">
<rich:treeNode>
<h:commandLink action="#{project.click}" value="Project: #{project.name}" />
</rich:treeNode>
<rich:recursiveTreeNodesAdaptor id="dir" var="dir" root="#{project.dirs}" nodes="#{dir.directories}">
<rich:treeNode>
<h:commandLink action="#{dir.click}" value="Directory: #{dir.name}" />
</rich:treeNode>
<rich:treeNodesAdaptor id="file" var="file" nodes="#{dir.files}">
<rich:treeNode>
<h:commandLink action="#{file.click}" value="File: #{file.name}" />
</rich:treeNode>
</rich:treeNodesAdaptor>
<rich:treeNodesAdaptor id="file1" var="file" nodes="#{dir.files}">
<rich:treeNode>
<h:commandLink action="#{file.click}" value="File1: #{file.name}" />
</rich:treeNode>
</rich:treeNodesAdaptor>
<rich:recursiveTreeNodesAdaptor id="archiveEntry" var="archiveEntry"
roots="#{dir.files}" nodes="#{archiveEntry.archiveEntries}"
includedRoot="#{archiveEntry.class.simpleName == 'ArchiveFile'}"
includedNode="#{archiveEntry.class.simpleName == 'ArchiveEntry'}">
<rich:treeNode id="archiveEntryNode">
<h:commandLink action="#{archiveEntry.click}" value="Archive entry: #{archiveEntry.name}" />
</rich:treeNode>
</rich:recursiveTreeNodesAdaptor>
</rich:recursiveTreeNodesAdaptor>
</rich:treeNodesAdaptor>
</rich:tree>
...