1 Reply Latest reply on Oct 20, 2009 5:29 PM by asriel

    Problem with ice:Tree

    asriel

      Hello,
      I'm trying (unsuccesfully) to display a Tree component (ice:Tree) to show a list of entities (Sperimentazione). A Sperimentazione can have child nodes (relationship one to many with the entity Fase).


      I tried to follow the example given in the ICEFaces' SEAM Component Showcase, but I received this error:



      Exception during request processing:
      Caused by javax.servlet.ServletException with message: "java.lang.Exception: javax.faces.FacesException: Problem in renderResponse: null"
      
      com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:179)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
      .....
      
      Caused by javax.faces.FacesException with message: "Problem in renderResponse: null"
      
      com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:296)
      com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
      com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
      com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
      com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
      .....
      
      Caused by java.lang.NullPointerException with message: ""
      
      com.icesoft.faces.component.tree.TreeRenderer.encodeNode(TreeRenderer.java:367)
      com.icesoft.faces.component.tree.TreeRenderer.encodeParentAndChildNodes(TreeRenderer.java:268)
      com.icesoft.faces.component.tree.TreeRenderer.encodeChildren(TreeRenderer.java:225)
      javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
      com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:358)
      .....
      





      This is the view:


      <ice:panelGroup>
          <ice:tree id="tree"
                    value="#{treeModel}"
                    var="node"
                    hideRootNode="false"
                    hideNavigation="false">
              <ice:treeNode>
                 <f:facet name="content">
                       <ice:panelGroup>
                            <ice:outputText value="Prova"/>
                       </ice:panelGroup>
                  </f:facet>
              </ice:treeNode>
          </ice:tree>
      </ice:panelGroup>
      




      This is the controller:


      @Name("testTreeController")
      @Scope(ScopeType.PAGE)
      public class TestTreeController {
           
           @In(create = true)
           private SperimentazioneList sperimentazioneList;
      
           @Out(scope = ScopeType.PAGE)
           private DefaultTreeModel treeModel;
           
           public TestTreeController() {
                super();
           }
      
           @Factory("treeModel")
           public void treeModelFactory() {
                DefaultMutableTreeNode rootNode = makeNode(null, true, "RADICE", new Object());
                ((AgnosticIceTreeNode) rootNode.getUserObject()).setExpanded(true);
                
              for (Sperimentazione sp : sperimentazioneList.getResultList()) {
                   DefaultMutableTreeNode spNode = makeNode(rootNode, true,
                             "Sperimentazione " + sp.getIdAmministrativo(), sp);
                   
                   for (Fase fs : sp.getFases()) {
                        DefaultMutableTreeNode fsNode = makeNode(spNode, false,
                                  fs.getClsFase().getTipo() + "." + fs.getIstanza() + " (" + fs.getStato() + ")", fs);
                   }
              }
              
                treeModel = new DefaultTreeModel(rootNode);
           }
           
           private DefaultMutableTreeNode makeNode(DefaultMutableTreeNode parent, boolean internalNode,
                     String title, Object object) {
                DefaultMutableTreeNode node = new DefaultMutableTreeNode();
                AgnosticIceTreeNode userObject = new AgnosticIceTreeNode(node);
                node.setUserObject(userObject);     
              userObject.setPayload(object);
      
                // non-employee node or branch
                if (internalNode) {
                     userObject.setText(title);
                     userObject.setLeaf(false);
                     userObject.setExpanded(true);
                     node.setAllowsChildren(true);
                }
                // employee node
                else {
                     userObject.setLeaf(true);
                     node.setAllowsChildren(false);
                }
                // finally add the node to the parent. 
                if (parent != null) {
                     parent.add(node);
                }
      
                return node;
          }
      }
      



      AgnosticIceTreeNode is a wrapper for IceUserObject that accepts as its payload any java object.


      If someone has an idea of why this does not work, please step forward! :)
      Thanks.