JBoss.orgCommunity Documentation

Chapter 12. Trees

12.1. <rich:tree>
12.1.1. Basic usage
12.1.2. Appearance
12.1.3. Expanding and collapsing tree nodes
12.1.4. Event handling
12.1.5. Reference data
12.1.6. <rich:treeNode>

Documentation in development

Some concepts covered in this chapter may refer to the previous version of Richfaces, version 3.3.3. This chapter is scheduled for review to ensure all information is up to date.

Read this chapter for details on components that use tree structures.

The <rich:tree> component provides a hierarchical tree control. Each <rich:tree> component typically consists of <rich:treeNode> child components. The appearance and behavior of the tree and its nodes can be fully customized.

The <rich:tree> component requires the value attribute to point to the data model for populating the tree. The data model must be either an org.richfaces.model.TreeNode interface, an org.richfaces.model.TreeDataModel interface, or a javax.swing.tree.TreeNode interface. The var attribute declares the variable used for iterating through the data model, so that child <rich:treeNode> components can reference each iteration.

For basic usage, the <rich:tree> component needs one or more <rich:treeNode> components to work with the data model.


Different nodes in the tree can have different appearances, such as node icons, depending on the type of data the node contains. Use the nodeFace attribute to differentiate the types of nodes; the node is then rendered according to the <rich:treeNode> component with the corresponding type attribute. ??? shows a <rich:tree> component with three different child <rich:treeNode> components defined to represent three different node appearances. Refer to Section 12.1.6.2, “Appearance” for details on customizing the appearance of <rich:treeNode> components.


Alternatively, use Expression Language (EL) with the nodeFace attribute, as shown in Example 12.3, “nodeface attribute with Expression Language”.


If the nodeFace attribute returns null, the node is rendered as a "typeless" node. The typeless node is the first child <rich:treeNode> component with a valid rendered attribute, but without a defined type attribute.

Icons for different nodes and node states can be defined for the whole tree using the following attributes:

icon

The icon attribute points to the icon to use for any node that contains child nodes.

iconLeaf

The iconLeaf attribute points to the icon to use for any node that does not contain any child nodes.

iconExpanded and iconCollapsed

The iconExpanded and iconCollapsed attributes point to the icons to use for expanded and collapsed nodes respectively. If these attributes are defined, the icon attribute is not used.

Alternatively, use facets with the same names as the attributes to define the icons, as shown in Example 12.4, “Icon facets”. The width of the rendered facet is 16 pixels.


The switching mode for performing submissions is determined by the switchType attribute, which can have one of the following three values:

The <rich:tree> component uses a data model to represent the node structure on the page. To identify a particular node during a client request, the model provides unique keys for tree nodes. The <rich:tree> component can use strings as key values. These strings may contain special characters that are not allowed by browsers, such as the left angle bracket (<) and ampersand (&). To allow these characters in the keys, the following converter is provided:

To apply a converter to the <rich:tree> component, define it with the rowKeyConverter attribute. Example 12.5, “Identifying nodes” demonstrates the use of a converter to identify tree nodes.


The <rich:treeNode> component is a child component of the <rich:tree> component. It represents nodes in the parent tree. The appearance and functionality of each tree node can be customized.

Refer to Section 12.1.2, “Appearance” for the <rich:tree> component for details and examples on styling nodes and icons. Icon styling for individual <rich:treeNode> components uses the same attributes as the parent <rich:tree> component: icon, iconLeaf, iconExpanded, and iconCollapsed. Icon-related attributes specified for child <rich:treeNode> components overwrite any global icon attributes of the parent <rich:tree> component.

Use the rendered attribute to determine whether the node should actually be rendered in the tree or not. Using the rendered attribute in combination with the <rich:treeNode> type attribute can allow further style differentiation between node content, as shown in Example 12.6, “rendered attribute”.