5 Replies Latest reply: Feb 2, 2012 11:57 AM by Lazy Guy RSS

    Rich:tree is not populating...

    Lazy Guy Newbie

      Hi to all,

       

      Am new to this community. and am a newbie to jsf and to richfaces .

      but I need to populate rich:tree component...

       

      Jsf page:

      -----------

       

      1. <h:form>     
      2.         <h:panelGrid columns="2" width="100%" columnClasses="col1,col2"
      3.          
      4.             <rich:tree style="width:300px" nodeSelectListener="#{simpleTreeBean.processSelection}"  
      5.                 reRender="selectedNode" ajaxSubmitSelection="true"  switchType="client" 
      6.                 value="#{simpleTreeBean.treeNode}" var="item"
      7.             </rich:tree> 
      8.              
      9.             <h:outputText escape="false" value="Selected Node: #{simpleTreeBean.nodeTitle}" id="selectedNode" /> 
      10.          
      11.         </h:panelGrid> 

       

      Java Bean:

       

      1. import java.io.IOException; 
      2. import java.io.InputStream; 
      3. import java.util.ArrayList; 
      4. import java.util.Iterator; 
      5. import java.util.List; 
      6. import java.util.Map; 
      7. import java.util.Properties; 
      8.  
      9. import javax.faces.FacesException; 
      10. import javax.faces.component.UIComponent; 
      11. import javax.faces.context.ExternalContext; 
      12. import javax.faces.context.FacesContext; 
      13.  
      14. import org.richfaces.component.UITree; 
      15. import org.richfaces.component.html.HtmlTree; 
      16. import org.richfaces.event.NodeSelectedEvent; 
      17. import org.richfaces.model.TreeNode; 
      18. import org.richfaces.model.TreeNodeImpl; 
      19.  
      20. public class SimpleTreeBean { 
      21.      
      22.     private TreeNode rootNode = null
      23.     private List<String> selectedNodeChildren = new ArrayList<String>();     
      24.      
      25.     private String nodeTitle; 
      26.     private static final String DATA_PATH = "/simple-tree.properties"
      27.      
      28.     private void addNodes(String path, TreeNode node, Properties properties) { 
      29.         boolean end = false
      30.         int counter = 1
      31.          
      32.         while (!end) { 
      33.             String key = path != null ? path + '.' + counter : String.valueOf(counter); 
      34.  
      35.             String value = properties.getProperty(key); 
      36.             if (value != null) { 
      37.                 TreeNodeImpl nodeImpl = new TreeNodeImpl(); 
      38.                 nodeImpl.setData(value); 
      39.                 node.addChild(new Integer(counter), nodeImpl); 
      40.                 addNodes(key, nodeImpl, properties); 
      41.                 counter++; 
      42.             } else
      43.                 end = true
      44.             } 
      45.         } 
      46.     } 
      47.      
      48.     private void loadTree() { 
      49.         FacesContext facesContext = FacesContext.getCurrentInstance(); 
      50.         ExternalContext externalContext = facesContext.getExternalContext(); 
      51.         InputStream dataStream = externalContext.getResourceAsStream(DATA_PATH); 
      52.         try
      53.             Properties properties = new Properties(); 
      54.             properties.load(dataStream); 
      55.              
      56.             rootNode = new TreeNodeImpl(); 
      57.             addNodes(null, rootNode, properties); 
      58.              
      59.         } catch (IOException e) { 
      60.             throw new FacesException(e.getMessage(), e); 
      61.         } finally
      62.             if (dataStream != null) { 
      63.                 try
      64.                     dataStream.close(); 
      65.                 } catch (IOException e) { 
      66.                     externalContext.log(e.getMessage(), e); 
      67.                 } 
      68.             } 
      69.         } 
      70.     } 
      71.      
      72.     public void processSelection(NodeSelectedEvent event) { 
      73.         HtmlTree tree = (HtmlTree) event.getComponent(); 
      74.         nodeTitle = (String) tree.getRowData(); 
      75.         selectedNodeChildren.clear(); 
      76.         TreeNode currentNode = tree.getModelTreeNode(tree.getRowKey()); 
      77.         if (currentNode.isLeaf()){ 
      78.             selectedNodeChildren.add((String)currentNode.getData()); 
      79.         }else 
      80.         { 
      81.             Iterator<Map.Entry<Object, TreeNode>> it = currentNode.getChildren(); 
      82.             while (it!=null &&it.hasNext()) { 
      83.                 Map.Entry<Object, TreeNode> entry = it.next(); 
      84.                 selectedNodeChildren.add(entry.getValue().getData().toString());  
      85.             } 
      86.         } 
      87.     } 
      88.      
      89.     public TreeNode getTreeNode() { 
      90.         if (rootNode == null) { 
      91.             loadTree(); 
      92.         } 
      93.          
      94.         return rootNode; 
      95.     } 
      96.  
      97.  
      98.      
      99.     public String getNodeTitle() { 
      100.         return nodeTitle; 
      101.     } 
      102.  
      103.     public void setNodeTitle(String nodeTitle) { 
      104.         this.nodeTitle = nodeTitle; 
      105.     } 
      106.  
      107.      

       

       

      But am not getting tree component.

       

      What to do?

      It's Just printing the output : Selected Node: but not populating tree component.

      I have one more doubt..wher to keep this properties file..

      richfaces Jar version that i used:

       

      richfaces-api-3.2.2.SR1.jar

      richfaces-impl-3.2.2.SR1.jar

      richfaces-ui-3.2.2.SR1.jar

       

      Thanks in advance..and pretty urgent...

        • 1. Re: Rich:tree is not populating...
          Mahesh Bonagiri Newbie

          you missed <rich:treeNode> in your jsf page.

          please refer following example

          http://livedemo.exadel.com/richfaces-demo/richfaces/tree.jsf?c=tree&tab=usage

          • 2. Re: Rich:tree is not populating...
            Lazy Guy Newbie

            As u said.. I kept the treenode tag:

             

            <rich:treenode>

                <h:outputText value="#{item}"></h:outputText>

            </rich:treenode>

             

            But no result..

            I tried the code from the below url..

            http://www.mastertheboss.com/web-interfaces/270-richfaces-tree-example.html

             

            What is going wrong.. am not getting..

             

            any working code?

            • 3. Re: Rich:tree is not populating...
              Lazy Guy Newbie

              .............

              Help me... in populating tree structure from properties file...

              • 4. Re: Rich:tree is not populating...
                Mahesh Bonagiri Newbie

                Hi Ali,

                 

                I am able to populate the tree. i copied the code from the url u gave.

                 

                This is the working code,try to use as it is, then modify with your need

                i removed the tree binding from the jsp file and added switchType="client" ajaxSubmitSelection="true".

                 

                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

                <ui:composition xmlns="http://www.w3.org/1999/xhtml"

                          xmlns:ui="http://java.sun.com/jsf/facelets"

                          xmlns:h="http://java.sun.com/jsf/html"

                          xmlns:f="http://java.sun.com/jsf/core"

                          xmlns:a4j="http://richfaces.org/a4j"

                          xmlns:rich="http://richfaces.org/rich">

                 

                 

                 

                 

                          <head>

                 

                 

                <title>tree</title>

                          </head>

                          <body>

                                    <f:view>

                                              <h:form>

                                                        <h:panelGrid columns="2" width="100%" columnClasses="col1,col2">

                 

                 

                                                                  <rich:tree style="width:300px"

                                                                            nodeSelectListener="#{simpleTreeBean.processSelection}"

                                                                            reRender="selectedNode" switchType="client" ajaxSubmitSelection="true"

                 

                                                                            value="#{simpleTreeBean.treeNode}" var="item" ajaxKeys="#{null}">

                                                                  </rich:tree>

                 

                 

                                                                  <h:outputText escape="false"

                                                                            value="Selected Node: #{simpleTreeBean.nodeTitle}"

                                                                            id="selectedNode" />

                 

                 

                                                        </h:panelGrid>

                 

                 

                                              </h:form>

                                    </f:view>

                          </body>

                </ui:composition>

                 

                import java.io.IOException;

                import java.io.InputStream;

                import java.util.ArrayList;

                import java.util.Iterator;

                import java.util.List;

                import java.util.Map;

                import java.util.Properties;

                 

                 

                import org.richfaces.component.html.HtmlTree;

                import org.richfaces.event.NodeSelectedEvent;

                import org.richfaces.model.TreeNode;

                import org.richfaces.model.TreeNodeImpl;

                 

                 

                public class SimpleTreeBean {

                          protected org.richfaces.component.UITree sampleTreeBinding;

                 

                 

                          public org.richfaces.component.UITree getSampleTreeBinding() {

                                    return sampleTreeBinding;

                          }

                 

                 

                          public void setSampleTreeBinding(

                                              org.richfaces.component.UITree sampleTreeBinding) {

                                    this.sampleTreeBinding = sampleTreeBinding;

                          }

                 

                 

                          private TreeNode rootNode = null;

                          private List<String> selectedNodeChildren = new ArrayList<String>();

                 

                 

                          private String nodeTitle;

                 

                 

                          private void addNodes(String path, TreeNode node, Properties properties) {

                                    boolean end = false;

                                    int counter = 1;

                 

                 

                                    while (!end) {

                                              String key = path != null ? path + '.' + counter : String

                                                                  .valueOf(counter);

                 

                 

                                              String value = properties.getProperty(key);

                                              if (value != null) {

                                                        TreeNodeImpl nodeImpl = new TreeNodeImpl();

                 

                 

                                                        nodeImpl.setData(value);

                                                        node.addChild(new Integer(counter), nodeImpl);

                                                        addNodes(key, nodeImpl, properties);

                                                        counter++;

                                              } else {

                                                        end = true;

                                              }

                                    }

                          }

                 

                 

                          private void loadTree() {

                                    Properties props = new Properties();

                                    InputStream stream = this.getClass().getClassLoader()

                                                        .getResourceAsStream("com/xyz/resources/richtree.properties");

                                    try {

                                              props.load(stream);

                                    } catch (IOException e) {

                                              // TODO Auto-generated catch block

                                              e.printStackTrace();

                                    }

                 

                 

                                    rootNode = new TreeNodeImpl();

                                    addNodes(null, rootNode, props);

                          }

                 

                 

                          public void processSelection(NodeSelectedEvent event) {

                                    HtmlTree tree = (HtmlTree) event.getComponent();

                                    nodeTitle = (String) tree.getRowData();

                                    selectedNodeChildren.clear();

                                    TreeNode currentNode = tree.getModelTreeNode(tree.getRowKey());

                                    if (currentNode.isLeaf()) {

                 

                 

                                              selectedNodeChildren.add((String) currentNode.getData());

                                    } else {

                                              Iterator<Map.Entry<Object, TreeNode>> it = currentNode

                                                                  .getChildren();

                                              while (it != null && it.hasNext()) {

                                                        Map.Entry<Object, TreeNode> entry = it.next();

                                                        selectedNodeChildren.add(entry.getValue().getData().toString());

                                              }

                                    }

                          }

                 

                 

                          public TreeNode getTreeNode() {

                                    if (rootNode == null) {

                                              loadTree();

                                    }

                                    return rootNode;

                          }

                 

                 

                          public String getNodeTitle() {

                                    return nodeTitle;

                          }

                 

                 

                          public void setNodeTitle(String nodeTitle) {

                                    this.nodeTitle = nodeTitle;

                          }

                 

                 

                }

                • 5. Re: Rich:tree is not populating...
                  Lazy Guy Newbie

                  Thank you soooooooooooooooooooooooooooooooo much...... Mahesh Bonagiri..