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>
...