Help

Controls

PermLinkWikiLink
Switch Workspace

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

Forum: Seam Users Forum ListTopic List
19. Oct 2009, 16:36 America/New_York | Link

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.

1 Reply:
20. Oct 2009, 17:29 America/New_York | Link

Solved.

<ice:tree> needed to be encapsulated inside an <ice:form>.