Weirdness with rich:tree
stevesobol Jul 2, 2009 4:43 PMI have an interesting situation where, under certain conditions, I can't expand a tree by clicking on it.
The XHTML:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich">
<a4j:log popup="false" level="WARN" width="500" height="300"/>
<a4j:form id="folderTreeForm">
<a4j:commandButton reRender="folderTree" actionListener="#{test.populate1}" value="Pop 1"></a4j:commandButton><br/><br/>
<a4j:commandButton reRender="folderTree" actionListener="#{test.populate2}" value="Pop 2"></a4j:commandButton><br/><br/>
<rich:tree immediate="yes" id="folderTree" binding="#{test.tree}" value="#{test.rootNode}"
var="item" changeExpandListener="#{test.expand}" switchType="ajax" ajaxSubmitSelection="true">
<rich:treeNode>#{item.value}</rich:treeNode>
</rich:tree>
</a4j:form>
</html>
The backing bean and a relevant snippet of my Faces config:
<managed-bean> <managed-bean-name>test</managed-bean-name> <managed-bean-class>test.Test</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
package test;
import javax.faces.event.ActionEvent;
import org.richfaces.component.html.HtmlTree;
import org.richfaces.event.NodeExpandedEvent;
import org.richfaces.model.TreeNodeImpl;
public class Test {
private TreeNodeImpl<MyNode> rootNode = null;
private HtmlTree tree = new HtmlTree();
public TreeNodeImpl<MyNode> getRootNode() {
return rootNode;
}
public void setRootNode(TreeNodeImpl<MyNode> rootNode) {
this.rootNode = rootNode;
}
public HtmlTree getTree() {
return tree;
}
public void setTree(HtmlTree tree) {
this.tree = tree;
}
public void populate1(ActionEvent evt) {
TreeNodeImpl<MyNode> first = newNode("1");
rootNode=newNode("0");
rootNode.addChild("1", first);
first.addChild("2", newNode("2"));
first.addChild("3", newNode("3"));
tree.setData(rootNode);
}
public void populate2(ActionEvent evt) {
TreeNodeImpl<MyNode> first = newNode("4");
rootNode=newNode("0");
rootNode.addChild("4", first);
first.addChild("5", newNode("6"));
first.addChild("6", newNode("6"));
tree.setData(rootNode);
}
public TreeNodeImpl<MyNode> newNode(String s) {
TreeNodeImpl<MyNode> temp = new TreeNodeImpl<MyNode>();
temp.setData(new MyNode(s));
return temp;
}
public void expand(NodeExpandedEvent evt) {
System.out.println("expand");
}
}
And finally, MyNode:
package test;
import org.richfaces.model.TreeNodeImpl;
public class MyNode extends TreeNodeImpl<String> {
public static final long serialVersionUID=0L;
String value=null;
public MyNode(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
If I populate the tree in response to a button click -- either using action=whatever or, in this case, using an ActionListener -- the tree will be redrawn, but if I click on the arrow to the left of the root node, nothing happens.
In Firefox 3.0.11, running on Windows Vista Ultimate SP1, I get the warning:
warn[13:35:44,048]: No information in response about elements to replace
In IE 8, running on the same computer, I get an error instead:
error[13:37:29,154]: . Error message: Invalid argument.
If I populate the tree in my backing bean's constructor or a method annotated as @PostConstruct, the tree works properly.
I'm new to RichFaces and I figure I may be doing something wrong.
Thanks in advance for any help you can offer.