Problem with dynamic add nodes with rich:tree
richard1978 Oct 2, 2009 4:05 AMCurrently I am developing dynamic tree menu. Due to the large data, I can only load and display the first level data. Only when user expand the second level of the node, back end service will fetch data back. Now the problem is I have already add the data to the TreeNode object, however the UI does not render the new nodes to the tree.
Any one can help me to solve the problem?
I am using richfaces-api-3.3.1GA & richfaces-impl-3.3.1 GA
Here is my code
Xhtml:
<f:view> <a4j:form> <!--<a4j:region renderRegionOnly="true" id="ajaxRegionId">--> <a4j:outputPanel ajaxRendered="true"> <rich:panel> <rich:tree id="clientTree" value="#{clientTreeController.clients}" var="item" reRender="NodeId" ajaxSubmitSelection="true" switchType="ajax" treeNodeVar="TreeNodeVar" ajaxKeys="#{null}"> <rich:treeNode id="treeNodeId" iconLeaf="/img/Transpusers.png" icon="/img/Transpusers.png" nodeSelectListener="#{clientTreeController.viewUsers}"> <h:outputText id="NodeId" value="#{item}"/> </rich:treeNode> </rich:tree> </rich:panel> </a4j:outputPanel> <!--</a4j:region>--> </a4j:form> </f:view>
ClientTreeController.java
@SuppressWarnings({"unchecked"}) public void viewUsers(NodeExpandedEvent evt) throws IOException { System.out.println("Execute viewUsers method"); Object source = evt.getSource(); if (source instanceof HtmlTreeNode) { UITree tree = ((HtmlTreeNode) source).getUITree(); if (tree == null) { return; } Object rowKey = tree.getRowKey(); TreeNode selectedTreeModelNode = tree.getModelTreeNode(rowKey); if (null != selectedTreeModelNode) { System.out.println("The selected node has child [" + selectedTreeModelNode.getChildren().hasNext()+"]"); String companyName = (String) selectedTreeModelNode.getData(); Client client = clientManager.getClientByName(companyName); List<UserEntityData> users = client.getUsers(); if (users == null) return; for (int k = 0; k < users.size(); k++) { TreeNodeImpl userNode = new TreeNodeImpl(); userNode.setData(users.get(k).getUserName()); userNode.setParent(selectedTreeModelNode); selectedTreeModelNode.addChild(k, userNode); } } else { System.out.println("selectedTreeNode is null"); } } }