[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