Tree Rendering Upon Page Reload

UI Components for JSF
Post Reply
hillobro
Posts: 2
Joined: 17 May 2011, 16:56

17 May 2011, 17:21

Hi All,

I'm using a snapshot release of primefaces version 3.0.M2. If you reload a page that has a dynamic tree, the tree retains all of its state information but it is rendered collapsed. You can tell that it is retaining its state as the expanded icons show on the root level nodes but they are not rendered expanded.

Here is a backing bean and an associated page that show the problem.

TreeBean.java

Code: Select all

import javax.faces.bean.SessionScoped;
import javax.faces.bean.ManagedBean;

import org.primefaces.model.TreeNode;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.event.NodeExpandEvent;
import org.primefaces.event.NodeCollapseEvent;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.event.NodeUnselectEvent;

@ManagedBean
@SessionScoped
public class TreeBean {

    private TreeNode root;
    private TreeNode selection = null;

    public TreeBean() {
        root = new DefaultTreeNode("Root", null);
        TreeNode node0 = new DefaultTreeNode("Node 0", root);
        TreeNode node1 = new DefaultTreeNode("Node 1", root);
        TreeNode node2 = new DefaultTreeNode("Node 2", root);

        TreeNode node00 = new DefaultTreeNode("Node 0.0", node0);
        TreeNode node01 = new DefaultTreeNode("Node 0.1", node0);

        TreeNode node10 = new DefaultTreeNode("Node 1.0", node1);
        TreeNode node11 = new DefaultTreeNode("Node 1.1", node1);

        TreeNode node000 = new DefaultTreeNode("Node 0.0.0", node00);
        TreeNode node001 = new DefaultTreeNode("Node 0.0.1", node00);
        TreeNode node010 = new DefaultTreeNode("Node 0.1.0", node01);

        TreeNode node100 = new DefaultTreeNode("Node 1.0.0", node10);
    }

    public TreeNode getRoot() {
        return root;
    }

    public TreeNode getSelection() {
        return selection;
    }

    public void setSelection(TreeNode selection) {
        this.selection = selection;
    }

    public void onNodeExpand(NodeExpandEvent event) {
        DefaultTreeNode tn = (DefaultTreeNode)event.getTreeNode();
        tn.setExpanded(true);
    };

    public void onNodeCollapse(NodeCollapseEvent event)
    {
        DefaultTreeNode tn = (DefaultTreeNode)event.getTreeNode();
        tn.setExpanded(false);
    }

    public void onNodeSelect(NodeSelectEvent event) {
        if(selection != null) {
            selection.setSelected(false);
        }
        selection = event.getTreeNode();
        selection.setSelected(true);
    }

    public void onNodeUnselect(NodeSelectEvent event) {
        selection.setSelected(false);
        selection = null;
    }
}
Tree.xhtml

Code: Select all

<html xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">
<f:view contentType="text/html">
<h:body>
     <h:form>
        <p:tree value="#{treeBean.root}"
                var="node"
                selectionMode="single"
                selection="#{treeBean.selection}"
                dynamic="true"
                cache="true"
                style="border:0px;width:400px;"
                expandAnim="FADE_IN"
                collapseAnim="FADE_OUT"
                nodeExpandListener="#{treeBean.onNodeExpand}"
                nodeSelectListener="#{treeBean.onNodeSelect}"
                nodeUnselectListener="#{treeBean.onNodeUnselect}"
                nodeCollapseListener="#{treeBean.onNodeCollapse}"
        >
            <p:treeNode>
              <h:outputText value="#{node}">
              </h:outputText>
            </p:treeNode>
        </p:tree>
        </h:form>
</h:body>
</f:view>
</html>
Thanks,
Bill

hillobro
Posts: 2
Joined: 17 May 2011, 16:56

19 May 2011, 23:48

Hi,

I realize that I pointed out my issue but didn't really ask a question. Does anyone know of a way to work around this, possibly with a javascript function that would walk the tree expanding the nodes that are marked as expanded and selecting the node that is marked as selected?

Is this the intended behavior or would this be considered a bug? I will file an issued if it is considered a bug.

Thanks,
Bill

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 40 guests