Tree Sample - Duplicate component ID '_id1' found in view.
klsateesh Apr 17, 2007 5:13 PMHi All,
I am trying to create a Simple Drag and Drop Tree and when i add Elements to the Root Element and the Child Elements i have added to the Root are leaf Nodes and they are getting displayed with Folder Icon. And when i try to expand any of these Child Nodes i am getting an Error..
And all these Child Nodes has the same Display Text ( Root Node)
Code i am using is:
I have a Basic DragDrop Tree Node . Still in the priliminary stage ..
package org.richfaces; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import javax.faces.FacesException; import javax.faces.component.UIComponent; import javax.faces.event.FacesEvent; import org.ajax4jsf.dnd.event.DragEvent; import org.ajax4jsf.dnd.event.DropEvent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.richfaces.component.ListRowKey; import org.richfaces.component.TreeNode; import org.richfaces.component.TreeNodeImpl; import org.richfaces.component.UITree; import org.richfaces.component.UITreeNode; import org.richfaces.component.events.NodeExpandedEvent; import org.richfaces.component.events.NodeSelectedEvent; public class DPADragDropTree { static Log log = LogFactory.getLog(DPADragDropTree.class); private TreeNode selectedNode = null; private UITree uiTree; private TreeNode rootNode = null; private Map nodeToTreeNodeMap = null; private Map selectedNodeChildren = new LinkedHashMap<TreeNode,Integer>(); private String expandPath; private Object dragValue; private String pathToExpand; private boolean dragOn; public DPADragDropTree(){ super(); dragOn = true; nodeToTreeNodeMap = new HashMap<Node,TreeNode>(); } // Tree Operations and Events public void onSelect(NodeSelectedEvent event) { log.info("Node selected: " + getTree(event).getRowKey()); if (getTree(event).getTreeNode() != null) { selectedNode = getTree(event).getTreeNode(); refreshSelectedNode(); } } public void onExpand(NodeExpandedEvent event) { UITree tree = getTree(event); log.info("Node " + (tree.isExpanded() ? "expanded" : "collapsed") + " " + tree.getRowKey()); } public String expand() { if (expandPath != null && expandPath.length() != 0) { try { uiTree.queueNodeExpand(new ListRowKey(expandPath)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } public String collapseAll() throws IOException { this.uiTree.queueCollapseAll(); return null; } public String expandAll() { try { this.uiTree.queueExpandAll(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public Map getSelectedNodeChildren() { return selectedNodeChildren; } public void setSelectedNodeChildren(Map selectedNodeChildren) { this.selectedNodeChildren = selectedNodeChildren; } public void processDrop(DropEvent dropEvent) { log.info("Should be printed twice per event!!!"); log.info(dropEvent); log.info("DragValue: " + dropEvent.getDragValue()); log.info("DropValue: " + dropEvent.getDropValue()); /* log.info("Drag row data: " + getTree(dropEvent).getRowData(dropEvent.getDragValue())); log.info("Drop row data: " + getTree(dropEvent).getRowData(dropEvent.getDropValue())); log.info("+++++"); */ log.info("Bean.processDrop()"); this.dragValue = dropEvent.getDragValue(); } public String expandNode() { String pathToExpand = getPathToExpand(); if (pathToExpand != null && pathToExpand.trim().length() != 0) { try { (getUiTree()).queueNodeExpand(new ListRowKey( pathToExpand)); } catch (IOException e) { throw new FacesException(e); } } return null; } public void processDrag(DragEvent dragEvent) { log.info("Bean.processDrag()"); } 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; } private void refreshSelectedNode() { 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++)); } } } // Setter and Getters for the Data Members.. /** * * @return */ public Map getNodeToTreeNodeMap() { return nodeToTreeNodeMap; } public void setNodeToTreeNodeMap(Map nodeToTreeNodeMap) { this.nodeToTreeNodeMap = nodeToTreeNodeMap; } public TreeNode getRootNode() { return rootNode; } public void setRootNode(TreeNode rootNode) { this.rootNode = rootNode; } public TreeNode getSelectedNode() { return selectedNode; } public void setSelectedNode(TreeNode selectedNode) { this.selectedNode = selectedNode; } public UITree getUiTree() { return uiTree; } public void setUiTree(UITree uiTree) { this.uiTree = uiTree; } public String getExpandPath() { return expandPath; } public void setExpandPath(String expandPath) { this.expandPath = expandPath; } public Object getDragValue() { return dragValue; } public void setDragValue(Object dragValue) { this.dragValue = dragValue; } public String getPathToExpand() { return pathToExpand; } public void setPathToExpand(String pathToExpand) { this.pathToExpand = pathToExpand; } public boolean isDragOn() { return dragOn; } public void setDragOn(boolean dragOn) { this.dragOn = dragOn; } }
And my Managed Bean is
public class FormatTreeBean { DPADragDropTree dragDropTree =null; public FormatTreeBean(){ dragDropTree = new DPADragDropTree(); initTree(dragDropTree); } public void setDragDropTree(DPADragDropTree dragDropTree) { this.dragDropTree = dragDropTree; } public DPADragDropTree getDragDropTree() { return dragDropTree; } public void initTree(DPADragDropTree dragDropTree){ TreeNodeImpl rootNode = new TreeNodeImpl(); rootNode.setData("Root Node"); for(int i=0;i<10;i++){ TreeNodeImpl childNode = new TreeNodeImpl(); childNode.setData(" Node "+i); childNode.setParent(rootNode); rootNode.addChild(new Integer(i), rootNode); } dragDropTree.setRootNode(rootNode); } }
And my JSP Page is:
<f:view> <a4j:outputPanel ajaxRendered="true"> <h:messages /> </a4j:outputPanel> <h:form> <dnd:dragIndicator id="treeIndicator"> <f:facet name="single"> <f:verbatim>{marker} <br /> {treeParam} <br /> {nodeParam}</f:verbatim> </f:facet> </dnd:dragIndicator> <rich:tree id="DPAFormatTree" value="#{FormatTreeBean.dragDropTree.rootNode}" var="node" nodeFace="#{data.name != 'param-value' ? 'input' : 'text'}" changeExpandListener="#{FormatTreeBean.dragDropTree.onExpand}" nodeSelectListener="#{FormatTreeBean.dragDropTree.onSelect}" binding="#{FormatTreeBean.dragDropTree.uiTree}" onselected="window.status='selectedNode: '+event.selectedNode" onexpand="window.status='expandedNode: '+event.expandedNode" oncollapse="window.status='collapsedNode: '+event.collapsedNode" ajaxSubmitSelection="true" reRender="outputText, selectOneListbox" preserveModel="none" dragIndicator="treeIndicator" immediate="false" acceptedTypes="file1" dragType="#{FormatTreeBean.dragDropTree.dragOn ? 'file1' : ''}" dropListener="#{FormatTreeBean.dragDropTree.processDrop}"> </rich:tree> </h:form> </f:view>
Another thing i couldn't figure out is setting the value for nodeFace. if i use
value ="{#node.data}" I am getting the Error: javax.faces.el.PropertyNotFoundException: Error getting property 'data' from bean of type java.lang.String
As the above should be resolved to
nodeFace ="#{FormatTreeBean.dragDropTree.rootNode.data}"
rootNode is of Type TreeNode and it has getData() method ..I am unable to figure out why
the type is java.lang.String as the error suggested..
Thanks
Sateesh