I will use three classes. The first containes a String value, projectName and a List devices; that I fill with the second Object, Device.
This Device Object will contain two variables as well, String deviceName; and List List channels, which will contain one variable, channelName.
Then I will use nested for loops to populate the first Class with a projectName, then the List of Device Objects, and within that for lopp populate the List of Channel Objects.
That should make it where I only need to bind the firs ProjectHolder class to my tree, but it will have access to all three Objcts right?
SOmthing like (this only covers projectName and devices Object.:
<rich:tree nodeSelectListener="#{treeClickBean.projectSelection}" ajaxSubmitSelection="true" switchType="client"
var="item" ajaxKeys="#{null}" reRender="projectForm">
<rich:treeNodesAdaptor nodes="#{testNodesBean.projects}" var="projects">
<rich:treeNode>
<h:outputLink value="/NI/explorer_click/project.jsf">
<h:outputText value="#{projects.projectName}" />
</h:outputLink>
</rich:treeNode>
<rich:recursiveTreeNodesAdaptor roots="#{projects.deviceAndChannels}" var="device">
<rich:treeNode>
<h:outputLink value="/NI/explorer_click/device.jsf">
<h:outputText value="#{device.deviceName}" />
</h:outputLink>
</rich:treeNode>