3 Replies Latest reply on Dec 30, 2007 3:57 PM by Nick Belaevski

    Rich:tree getData() for selection question

    Andy Gibson Newbie

      Hey folks,

      I know there are a number of posts on rich:tree, but couldn't find anything to answer the problem. I cannot get data from tree nodes passed to events to get the data for the selected node. I don't know whether it can be done using the page side tree definition, or whether I have to go through the process of defining the tree model on the server side by a model object implementing the TreeNode interface?

      I have a rich:tree, and use the recursive tree nodes adapter to get my nodes in the tree. My tree is displaying fine and it works nicely.

      I have a set of security categories which are defined recursively (a category has a parent category) and each category has none or more security rights. I have the following in my xhtml file :

      <rich:tree switchType="client" reRender="tabUsers" ajaxSubmitSelection="true" >
      
       <rich:recursiveTreeNodesAdaptor nodes="#{v_node.categories}"
       roots="#{securityCategories}" var="v_node">
      
       <rich:treeNode iconLeaf="/img/iconFolder.gif">
       <h:outputText value="#{v_node.description}"></h:outputText>
       </rich:treeNode>
      
       <rich:treeNodesAdaptor nodes="#{v_node.rights}" var="v_rightNode">
       <rich:treeNode iconLeaf="/img/padlock.gif" nodeSelectListener="#{userRightAssignment.userRightNodeSelected}">
       <h:outputText value="#{v_rightNode.description}" />
       </rich:treeNode>
       </rich:treeNodesAdaptor>
      
       </rich:recursiveTreeNodesAdaptor>
      
      </rich:tree>
      


      This displays just fine and my select listener "userRightNodeSelected" is defined as :
       public void userRightNodeSelected(NodeSelectedEvent event) {
      
       UITreeNode node = null;
       node = (UITreeNode) event.getComponent();
      
       if (node == null) {
       return;
       }
      
       Object selectedData = node.getData();
      
       if (selectedData instanceof UserRight) {
       log.debug("Setting User Right");
       setSelectedUserRight((UserRight) selectedData);
       } else {
       log.debug("Nulling User Right");
       setSelectedUserRight(null);
       }
       log.debug("User right is now #0", selectedUserRight);
       }
      
      


      The event is called and the node obtained is an HtmlTreeNode. When I call getData(), I get null every time.

      The question is how do I attach data (the Category or UserRight) to the tree node and can it be done automatically with using recursive tree nodes adapter, or do I have to create the tree based on TreeNode classes using the Model?

      Cheers,

      Andy