Both recursiveTreeNodesAdaptor & treeNodesAdaptor (model adaptor components further in the text)
components allow defining data model declaratively and binding treeNode components to tree model nodes.
treeNodesAdaptor has a "nodes" attribute that's used to define a collection of elements to iterate through.
Collections are allowed to include: lists, arrays, maps, XML NodeList & NamedNodeMap either as single
object. The current collection element is accessible via a request-scoped variable named as "var"
recursiveTreeNodesAdaptor is an extension of a treeNodesAdaptor component that allows you to define two
different value expressions: the first, assigned by "roots" attribute is used at the top of recursion,
the second "nodes" is used on another recursion levels (the second level and deeper).
Model adaptor components can be nested without any limitations. The following code-snippet
shows an example of using Nodes Adapter along with rich:tree
Data model nodes are wired to treeNode components by nesting treeNode components with a "type"
attribute not defined inside model adaptor components. The first rendered one is used, or the default
one if all treeNode components are non-rendered.