### Create new RichFaces Documentation Jira issue

Summary
255 characters left
Description
Environment
This will launch the RichFaces Jira page - to complete your feedback please login if needed, and submit the Jira.

JBoss.org Community Documentation

- Prev
- Next

### 6.9.4. < rich:recursiveTreeNodesAdaptor > available since 3.1.0

expand all

#### 6.9.4.1. Description

The <rich:recursiveTreeNodesAdaptor> is an extension of a <rich:treeNodesAdaptor> component that provides the possibility to define data models and process nodes recursively.

Figure 6.73. Expanded tree with <rich:recursiveTreeNodesAdaptor>

#### 6.9.4.2. Key Features

- Allows to define combined data models

- Possibility to define nodes for processing via attributes

- Allows to process nodes recursively

#### 6.9.4.3. Details of Usage

The <rich:recursiveTreeNodesAdaptor> component has a "roots" attribute that defines collection to use at the top of recursion.

The "nodes" attribute defines collection to use on another recursion levels.

The "var" attribute is used to access to the current collection element.

The <rich:recursiveTreeNodesAdaptor> component can be nested without any limitations. See the following example.

Example:

    ...

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

    ...

#### 6.9.4.4. Reference Data

Table of <rich:recursiveTreeNodesAdaptor> attributes.

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

#### 6.9.4.5. Relevant Resources Links

On the component Live Demo page you can see the example of <rich:recursiveTreeNodesAdaptor> usage.

- Prev6.9.3. < rich:treeNodesAdaptor > ...
- Top of page
- Front page
- Next6.9.5. < rich:changeExpandListener >...