[richfaces-svn-commits] JBoss Rich Faces SVN: r256 - in trunk: richfaces/tree/src/main/resources/org/richfaces/renderkit/html/scripts and 2 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Tue Apr 3 15:14:54 EDT 2007


Author: nbelaevski
Date: 2007-04-03 15:14:54 -0400 (Tue, 03 Apr 2007)
New Revision: 256

Modified:
   trunk/richfaces-samples/tree-demo/src/main/java/org/richfaces/Bean.java
   trunk/richfaces-samples/tree-demo/src/main/webapp/pages/index.jsp
   trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
   trunk/richfaces/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree.js
Log:
http://jira.jboss.com/jira/browse/RF-50 fixed. Test app updated

Modified: trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
--- trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java	2007-04-03 15:58:16 UTC (rev 255)
+++ trunk/richfaces/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java	2007-04-03 19:14:54 UTC (rev 256)
@@ -22,7 +22,9 @@
 package org.richfaces.renderkit;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -38,6 +40,7 @@
 import org.ajax4jsf.framework.renderer.ComponentsVariableResolver;
 import org.ajax4jsf.framework.util.javascript.JSFunction;
 import org.ajax4jsf.framework.util.javascript.JSReference;
+import org.ajax4jsf.framework.util.javascript.ScriptUtils;
 import org.richfaces.component.LastElementAware;
 import org.richfaces.component.TreeRowKey;
 import org.richfaces.component.UITree;
@@ -145,6 +148,8 @@
 				responseWriter.startElement("div", tree);
 				writeNamespace(context, component);
 
+				List encodedAreaIds = new ArrayList();
+				
 				try {
 					Set ajaxKeys = tree.getAjaxKeys(); 
 					if (ajaxKeys != null) {
@@ -154,10 +159,11 @@
 							tree.setRowKey(key);
 
 							String id = tree.getNodeFacet().getClientId(context);
-							if (ids.isEmpty() || ids.contains(id)) {
+							if (ids.isEmpty() || ids.contains(id) || ids.contains(tree.getClientId(context))/* handle tree updates requests */) {
 								writeContent(context, tree, key);
 								encodeScripts = true;
 								renderedAreas.add(id);
+								encodedAreaIds.add(id);
 							}
 						}
 					}
@@ -168,7 +174,7 @@
 					tree.restoreOrigValue();
 				}
 				if (encodeScripts) {
-					writeScript(context, tree, renderedAreas);
+					writeScript(context, tree, encodedAreaIds, renderedAreas);
 				}
 
 				String inputId = encodeSelectionStateInput(context, tree);
@@ -243,7 +249,7 @@
 		return "Richfaces_Tree_" + id.replaceAll("[^A-Za-z0-9_]", "_");
 	}
 
-	private void writeScript(FacesContext context, UITree tree,
+	private void writeScript(FacesContext context, UITree tree, List encodedAreaIds,
 			Set renderedAreas) throws IOException {
 		final ResponseWriter writer = context.getResponseWriter();
 		final String clientId = tree.getBaseClientId(context);
@@ -254,30 +260,12 @@
 		writer.startElement("script", tree);
 		getUtils().writeAttribute(writer, "type", "text/javascript");
 
-		Set set = tree.getAjaxKeys();
 		String varName = getJavaScriptVarName(context, tree);
 
-		Object storedRowKey = tree.getRowKey();
+		writer.writeText(varName + ".getNodeElements(" + 
+			ScriptUtils.toScript(encodedAreaIds) + ");", null);
 		
-		try {
-			if (set != null) {
-				Iterator iterator = set.iterator();
-				while (iterator.hasNext()) {
-					TreeRowKey rowKey = (TreeRowKey) iterator.next();
 
-					tree.setRowKey(rowKey);
-					
-					writer.writeText(varName + ".getNodeElements(" + varName
-							+ ", \"" + tree.getNodeFacet().getClientId(context) + "\");", null);
-				}
-
-				set.clear();
-			}
-		} finally {
-			tree.setRowKey(storedRowKey);
-		}
-		
-
 		writer.endElement("script");
 		writer.endElement("div");
 

Modified: trunk/richfaces/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree.js
===================================================================
--- trunk/richfaces/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree.js	2007-04-03 15:58:16 UTC (rev 255)
+++ trunk/richfaces/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree.js	2007-04-03 19:14:54 UTC (rev 256)
@@ -128,15 +128,25 @@
 		this.items.each(function(item) {item.deselect();} );
 	},
 
-	getNodeElements: function(node, nodeId) {
+	
+	getNodeElements: function(nodeIds) {
+		if (nodeIds) {
+			for (var i = 0; i < nodeIds.length; i++ ) {
+				this._getNodeElements(this, nodeIds[i]);
+			}
+
+			this.selectionManager.restoreSelection();
+		}
+	},
+	
+	_getNodeElements: function(node, nodeId) {
 		if (node.id == nodeId) {
 			node.getElements();
 			node.observeEvents();
-			this.selectionManager.restoreSelection();
 			this.input = $(this.inputId);
 		} else {
 			for (var i = 0; i < node.childs.length; i++) {
-				this.getNodeElements(node.childs[i], nodeId);
+				this._getNodeElements(node.childs[i], nodeId);
 			}
 		}
 	},

Modified: trunk/richfaces-samples/tree-demo/src/main/java/org/richfaces/Bean.java
===================================================================
--- trunk/richfaces-samples/tree-demo/src/main/java/org/richfaces/Bean.java	2007-04-03 15:58:16 UTC (rev 255)
+++ trunk/richfaces-samples/tree-demo/src/main/java/org/richfaces/Bean.java	2007-04-03 19:14:54 UTC (rev 256)
@@ -22,9 +22,11 @@
 package org.richfaces;
 
 import java.io.IOException;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Set;
 
 import javax.faces.FacesException;
 import javax.faces.component.UIComponent;
@@ -32,8 +34,10 @@
 import javax.faces.event.FacesEvent;
 
 import org.ajax4jsf.dnd.event.DropEvent;
+import org.ajax4jsf.framework.ajax.AjaxContext;
 import org.richfaces.component.ListRowKey;
 import org.richfaces.component.TreeNode;
+import org.richfaces.component.TreeNodeImpl;
 import org.richfaces.component.TreeRowKey;
 import org.richfaces.component.UITree;
 import org.richfaces.component.UITreeNode;
@@ -65,6 +69,10 @@
 	private String pathToExpand;
 
 	private boolean dragOn = true;
+
+	private TreeNodeImpl data1;
+
+	private int counter = 0;
 	
 	public String getIcon() {
 		return icon;
@@ -116,6 +124,20 @@
 			e.printStackTrace();
 		}
 
+		data1 = new TreeNodeImpl();
+		data1.setData("Root node");
+		for (int i = 0; i < 10; i++)
+		{
+			TreeNodeImpl child = new TreeNodeImpl() {
+
+				public Object getData() {
+					return super.getData() + " " + counter;
+				}
+			};
+			String id = Integer.toString(i);
+			child.setData("Node: " + id);
+			data1.addChild(id, child);
+		}
 		initData();
 	}
 
@@ -159,6 +181,32 @@
 		}
 	}
 
+	public void onSelectInc(NodeSelectedEvent event) {
+		counter ++;
+		
+		UITree tree = getTree(event);
+		TreeRowKey key = (TreeRowKey)tree.getRowKey();
+		Set keys = tree.getAjaxKeys();
+		if (keys == null)
+		{
+			keys = new HashSet();
+			tree.setAjaxKeys(keys);
+		}
+
+		AjaxContext ajaxCtx = AjaxContext.getCurrentInstance();
+		FacesContext fctx = FacesContext.getCurrentInstance();
+		tree.setRowKey(null);
+		// Force more than one node to update here:
+		for (int i = 0; i < 5; i++)
+		{
+			ListRowKey dirtyKey = new ListRowKey(Integer.toString(i));
+			keys.add(dirtyKey);
+			tree.setRowKey(dirtyKey);
+			ajaxCtx.addComponentToAjaxRender(tree.getParent(), tree.getClientId(fctx));
+		}
+		tree.setRowKey(key);
+	}
+	
 	private void initData() {
 		selectedNodeChildren.clear();
 		if (selectedNode != null) {
@@ -302,4 +350,12 @@
 	public void setDragOn(boolean dragOn) {
 		this.dragOn = dragOn;
 	}
+	
+	public TreeNodeImpl getData1() {
+		return data1;
+	}
+	
+	public void setData1(TreeNodeImpl data1) {
+		this.data1 = data1;
+	}
 }
\ No newline at end of file

Modified: trunk/richfaces-samples/tree-demo/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/richfaces-samples/tree-demo/src/main/webapp/pages/index.jsp	2007-04-03 15:58:16 UTC (rev 255)
+++ trunk/richfaces-samples/tree-demo/src/main/webapp/pages/index.jsp	2007-04-03 19:14:54 UTC (rev 256)
@@ -97,6 +97,25 @@
 					<a4j:support event="onchange" reRender="tree" action="#{bean.expandNode}"/>
 				</h:inputText>
 	
+				<f:verbatim>
+					<br />
+					<br />
+				</f:verbatim>
+	
+				<rich:tree  id="testTree"
+				  var="_data"
+				  switchType="ajax"
+				  ajaxSubmitSelection="true"
+				  preserveModel="none"
+				  value="#{bean.data1}"
+				  nodeSelectListener="#{bean.onSelectInc}"
+				  nodeFace="node">
+				  <rich:treeNode type="node">
+				    <h:outputText value="#{_data}" />
+				  </rich:treeNode>
+				</rich:tree>	
+
+
 			</h:form>
 
 			<a4j:status startText="...start..." />




More information about the richfaces-svn-commits mailing list