Rerender not performed onselect
mkut May 23, 2007 3:41 AMI have a tree which I want to use for navigation. Unfortunately the wanted page is not rendered when I select a node. The rendering is done when I expand/collapse a node. I modified the jboss-richfaces-3.0.1rc2-samples/tree-demo a little bit. I think that the timestamp should also be rerendered when a node is selected but it is only rerendered when I expand/collapse a node.
Thanks in advance.
index.jsp: <body> <f:view> <h:form> <a4j:outputPanel id="treepanel" ajaxRendered="true"> <rich:tree id="tree" switchType="server" value="#{bean.data}" var="data" changeExpandListener="#{bean.onExpand}" nodeSelectListener="#{bean.onSelect}" ajaxSubmitSelection="true" reRender="tree,treepanel,messagepanel" iconCollapsed="#{bean.iconCollapsed}" iconExpanded="#{bean.iconExpanded}" iconLeaf="#{bean.iconLeaf}" icon="#{bean.icon}"> <rich:treeNode type="input" > <h:outputText value="#{data} : " /> </rich:treeNode> </rich:tree> </a4j:outputPanel> </h:form> <br/> <a4j:status startText="...start..." /> <a4j:log hotkey="O" /> <br/> <a4j:outputPanel id="messagepanel" ajaxRendered="true"> <a4j:include viewId="#{bean.messagePanel}"/> </a4j:outputPanel> </f:view> </body>
messagepanel.jsp: <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %> <h:outputText value="#{bean.timestamp}" />
Bean.java public class Bean { private TreeNode data; private TreeNode selectedNode = null; private Map selectedNodeChildren = new LinkedHashMap(); private String iconCollapsed = null; private String iconExpanded = null; private String iconLeaf = null; private String icon = null; DateFormat fmt = DateFormat.getDateTimeInstance(); String timestamp; public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Bean() { try { data = XmlTreeDataBuilder.build(new InputSource( getClass().getResourceAsStream("test.xml"))); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } initData(); } public TreeNode getData() { return data; } private UITree getTree(FacesEvent event) { UIComponent component = event.getComponent(); if (component instanceof UITree) { return ((UITree) component); } if (component instanceof UITreeNode) { return ((UITree) component.getParent()); } return null; } public void onSelect(NodeSelectedEvent event) { System.out.println("Node selected: " + getTree(event).getRowKey()); if (getTree(event).getTreeNode()!=null) { selectedNode = getTree(event).getTreeNode(); initData(); } } private void initData() { selectedNodeChildren.clear(); if (selectedNode != null) { Iterator iter = selectedNode.getChildren(); int i = 0; while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); selectedNodeChildren.put(((TreeNode)entry.getValue()).getData(), Integer.toString(i++)); } } } public void onExpand(NodeExpandedEvent event) { UITree tree = getTree(event); System.out.println("Node " + (tree.isExpanded() ? "expanded" : "collapsed") + " " + tree.getRowKey()); } private UITree tree; public UIComponent getTree() { return tree; } public Map getSelectedNodeChildren() { return selectedNodeChildren; } public void setSelectedNodeChildren(Map selectedNodeChildren) { this.selectedNodeChildren = selectedNodeChildren; } public String getIconCollapsed() { return iconCollapsed; } public void setIconCollapsed(String iconCollapsed) { this.iconCollapsed = iconCollapsed; } public String getIconExpanded() { return iconExpanded; } public void setIconExpanded(String iconExpanded) { this.iconExpanded = iconExpanded; } public String getIconLeaf() { return iconLeaf; } public void setIconLeaf(String iconLeaf) { this.iconLeaf = iconLeaf; } public String getMessagePanel() { return "/pages/messagepanel.jsp"; } public String getTimestamp() { timestamp = fmt.format( System.currentTimeMillis()); return timestamp; } }
faces-config.xml: <faces-config> <managed-bean> <managed-bean-name>bean</managed-bean-name> <managed-bean-class>org.richfaces.Bean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> ... </faces-config>