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;
}
}
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>
Bill