5-14 Java EE Developers Guide for Oracle Application Development Framework
When you create a databound tree table using the Data Controls panel, JDeveloper adds binding objects to the page definition file, and it also adds the treeTable tag to
the JSF page. The resulting UI component is fully functional and does not require any further modification.
5.5.2.1 Code Generated in the JSF Page
Example 5–4 shows the code generated in a JSF page when you use the Data Controls
panel to create a tree table. This sample tree table displays two levels of nodes: products and stock levels.
By default, the treeTable tag is created inside a form. The value attribute of the tree
table tag contains an EL expression that binds the tree component to the binding object that will populate it with data. The treeModel property refers to an
ADF class that defines how the tree hierarchy is displayed, based on the underlying data model. The var attribute provides access to the current node.
Example 5–4 Code Generated in the JSF Page for a Databound ADF Faces Tree Table
af:treeTable value={bindings.orderItemFindAll.treeModel} var=node selectionListener={bindings.orderItemFindAll.treeModel.makeCurrent}
rowSelection=single id=tt1 f:facet name=nodeStamp
af:column id=c1 af:outputText value={node} id=ot1
af:column f:facet
f:facet name=pathStamp af:outputText value={node} id=ot2
f:facet af:treeTable
In the facet tag, the nodeStamp facet is used to display the data for each node. Instead of having a component for each node, the tree repeatedly renders the
nodeStamp facet, similar to the way rows are rendered for the ADF Faces table
component. The pathStamp facet renders the column and the path links above the table that enable the user to return to the parent node after focusing on a detail node.
5.5.2.2 Binding Objects Defined in the Page Definition File
The binding objects created in the page definition file for a tree table are exactly the same as those created for a tree.
5.5.3 What Happens at Runtime: Events
Tree components use oracle.adf.view.faces.model.TreeModel to access
data. This class extends CollectionModel, which is used by the ADF Faces table component to access data. For more information about the TreeModel class, refer to
the ADF Faces Javadoc.
When a page with a tree table is displayed, the iterator binding on the treeTable component populates the root node and listens for a row navigation event such as the
user clicking the Next or Previous buttons or selecting a row from the range navigator. When the user initiates a row navigation event, the iterator displays the
appropriate row.
If the user changes the view focus by clicking on the component’s focus icon, the treeTable
component generates a focus event FocusEvent. The node to which
Displaying Master-Detail Data 5-15
the user wants to change focus is made the current node before the event is delivered. The treeTable component then modifies the focusPath property accordingly. You
can bind the FocusListener attribute on the tree to a method on a managed bean. This method will then be invoked in response to the focus event.
When a user expands or collapses a node, a disclosure event DisclosureEvent is sent. The isExpanded method on the disclosure event determines whether the user is
expanding or collapsing the node. The disclosure event has an associated listener, DisclosureListener
. The DisclosureListener attribute on the tree table is bound to the accessor attribute specified in the node rule defined in the page definition
file. This accessor attribute is invoked in response to a disclosure event for example, the user expands a node and returns the collection that populates that node.
The treeTable component includes Expand All and Collapse All links. When a user clicks one of these links, the treeTable sends a DisclosureAllEvent event. The
isExpandAll method on this event determines whether the user is expanding or
collapsing all the nodes. The table then expands or collapses the nodes that are children of the root node currently in focus. In large trees, the expand all command
will not expand nodes beyond the immediate children. The ADF Faces treeTable component uses an instance of the oracle.adf.view.faces.model.PathSet
class to determine expanded nodes. This instance is stored as the treeState attribute on the component. You can use this instance to programmatically control the
expanded or collapsed state of a node in the hierarchy. Any node contained by the PathSet
instance is deemed expanded. All other nodes are collapsed. This class also supports operations like addAll and removeAll.
Like the ADF Faces table component, a treeTable component provides for range navigation. However, instead of using the rows attribute, the treeTable component
uses a rowsByDepth attribute whose value is a space-separated list of non-negative numbers. Each number defines the range size for a node level on the tree. The first
number is the root node of the tree, and the last number is for the branch nodes. If there are more branches in the tree than numbers in the rowsByDepth attribute, the
tree uses the last number in the list for the remaining branches. Each number defines the limit on the number items displayed at one time in each branch. If you want to
display all items in a branch, specify 0 in that position of the list.
For example, if the rowsByDepth attribute is set to 0 0 3, all root nodes will be displayed, all direct children of the root nodes will be displayed, but only three nodes
will display per branch after that. The treeTable component includes links to navigate to additional nodes, enabling the user to display the additional nodes.
For more information about the ADF Faces treeTable component, refer to the oracle.adf.view.faces.component.core.data.CoreTreeTable
class in the ADF Faces Javadoc.
5.5.4 Using the TargetIterator Property