Author: nbelaevski
Date: 2010-11-18 11:54:07 -0500 (Thu, 18 Nov 2010)
New Revision: 20103
Added:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java
Modified:
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSBind.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunction.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunctionDefinition.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSLiteral.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSObject.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSReference.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptString.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptStringBase.java
trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptUtils.java
trunk/core/api/src/test/java/org/ajax4jsf/javascript/ScriptUtilsTest.java
trunk/core/impl/src/main/java/org/richfaces/application/push/impl/AbstractRequest.java
trunk/core/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java
trunk/examples/iteration-demo/src/main/webapp/tree.xhtml
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/AjaxEventOptions.java
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/RenderKitUtils.java
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/AjaxFunctionRendererBase.java
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/ClientSelectItem.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/DataScrollerBaseRenderer.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderPartial.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/tree.js
trunk/ui/iteration/ui/src/main/templates/tree.template.xml
trunk/ui/iteration/ui/src/main/templates/treeNode.template.xml
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PopupPanelBaseRenderer.java
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ValidatorScriptBase.java
trunk/ui/validator/ui/src/test/java/org/richfaces/component/Bean.java
trunk/ui/validator/ui/src/test/java/org/richfaces/component/Script.java
Log:
RF-9714
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSBind.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSBind.java 2010-11-18 16:37:36
UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSBind.java 2010-11-18 16:54:07
UTC (rev 20103)
@@ -23,6 +23,8 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
+
/**
* Created 04.08.2008
* @author Nick Belaevski
@@ -38,9 +40,9 @@
this.vars = vars;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append("function () {");
- functionString.append("var vars = {");
+ public void appendScript(Appendable target) throws IOException {
+ target.append("function () {");
+ target.append("var vars = {");
boolean isFirst = true;
@@ -48,17 +50,18 @@
if (isFirst) {
isFirst = false;
} else {
- functionString.append(',');
+ target.append(',');
}
- functionString.append(var);
- functionString.append(':');
- functionString.append(var);
+ target.append(var);
+ target.append(':');
+ target.append(var);
}
- functionString.append("};");
- functionString.append("return function() { with (vars) {");
- functionString.append(function.toScript());
- functionString.append("}}}()");
+ target.append("};");
+ target.append("return function() { with (vars) {");
+ target.append(function.toScript());
+ target.append("}}}()");
}
+
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunction.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunction.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunction.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,6 +23,7 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -52,8 +53,8 @@
return this;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append(name).append('(');
+ public void appendScript(Appendable target) throws IOException {
+ target.append(name).append('(');
boolean first = true;
List<?> parameters = getParameters();
@@ -63,26 +64,27 @@
Object element = param.next();
if (!first) {
- functionString.append(',');
+ target.append(',');
}
if (null != element) {
- functionString.append(ScriptUtils.toScript(element));
+ ScriptUtils.appendScript(target, element);
} else {
- functionString.append("null");
+ target.append("null");
}
first = false;
}
}
- functionString.append(")");
+ target.append(")");
}
-
+
/**
* @return the parameters
*/
public List<Object> getParameters() {
return this.parameters;
}
+
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunctionDefinition.java
===================================================================
---
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunctionDefinition.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSFunctionDefinition.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,6 +23,7 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -56,18 +57,14 @@
return this;
}
- /*
- * (non-Javadoc)
- * @see
org.ajax4jsf.components.renderkit.scriptutils.ScriptString#appendScript(java.lang.StringBuffer)
- */
- public void appendScript(StringBuffer functionString) {
- functionString.append("function");
+ public void appendScript(Appendable target) throws IOException {
+ target.append("function");
if (null != name) {
- functionString.append(" ").append(name);
+ target.append(" ").append(name);
}
- functionString.append("(");
+ target.append("(");
boolean first = true;
@@ -75,16 +72,16 @@
Object element = param.next();
if (!first) {
- functionString.append(',');
+ target.append(',');
}
- functionString.append(element.toString());
+ target.append(element.toString());
first = false;
}
- functionString.append("){").append(body).append("}");
+ target.append("){").append(body).append("}");
}
-
+
/**
* @return the name
*/
@@ -98,4 +95,5 @@
public void setName(String name) {
this.name = name;
}
+
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSLiteral.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSLiteral.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSLiteral.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,6 +23,7 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
import java.io.Serializable;
/**
@@ -53,14 +54,10 @@
this.literal = literal;
}
- /*
- * (non-Javadoc)
- * @see org.ajax4jsf.javascript.ScriptString#appendScript(java.lang.StringBuffer)
- */
- public void appendScript(StringBuffer jsString) {
- jsString.append(literal);
+ public void appendScript(Appendable target) throws IOException {
+ target.append(literal);
}
-
+
/**
* @return the literal
*/
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSObject.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSObject.java 2010-11-18 16:37:36
UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSObject.java 2010-11-18 16:54:07
UTC (rev 20103)
@@ -23,6 +23,8 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
+
/**
* @author shura (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.1.2.1 $ $Date: 2007/01/09 18:58:30 $
@@ -40,8 +42,8 @@
// TODO Auto-generated constructor stub
}
- public void appendScript(StringBuffer functionString) {
- functionString.append("new ");
- super.appendScript(functionString);
+ public void appendScript(Appendable target) throws IOException {
+ target.append("new ");
+ super.appendScript(target);
}
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSReference.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSReference.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/JSReference.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,6 +23,8 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
+
/**
* Create reference to JavaScript variable with optional index.
* @author asmirnov(a)exadel.com (latest modification by $Author: alexsmirnov $)
@@ -58,15 +60,14 @@
this.index = index;
}
- /*
- * (non-Javadoc)
- * @see org.ajax4jsf.javascript.ScriptString#appendScript(java.lang.StringBuffer)
- */
- public void appendScript(StringBuffer functionString) {
- functionString.append(name);
+ public void appendScript(Appendable target) throws IOException {
+ target.append(name);
if (null != index) {
-
functionString.append("[").append(ScriptUtils.toScript(index)).append("]");
+ target.append("[");
+ ScriptUtils.appendScript(target, index);
+ target.append("]");
}
}
+
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptString.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptString.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptString.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,6 +23,9 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
+
+
/**
* @author shura (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.1.2.1 $ $Date: 2007/01/09 18:58:32 $
@@ -37,8 +40,15 @@
public abstract String toScript();
/**
- * Append JavaScript code to @link StringBuffer
- * @param functionString
+ * Append JavaScript code to @link {@link Appendable}
+ * @param target
+ * @throws IOException
*/
- public void appendScript(StringBuffer functionString);
+ public void appendScript(Appendable target) throws IOException;
+
+ /**
+ * Append JavaScript code to @link {@link StringBuilder}
+ * @param stringBuilder
+ */
+ public void appendScriptToStringBuilder(StringBuilder stringBuilder);
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptStringBase.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptStringBase.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptStringBase.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,6 +23,11 @@
package org.ajax4jsf.javascript;
+import java.io.IOException;
+
+import javax.faces.FacesException;
+
+
/**
* @author shura (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.1.2.2 $ $Date: 2007/01/26 10:38:52 $
@@ -30,13 +35,24 @@
*/
public abstract class ScriptStringBase implements ScriptString {
public String toScript() {
- StringBuffer functionString = new StringBuffer();
+ StringBuilder builder = new StringBuilder();
- appendScript(functionString);
+ try {
+ appendScript(builder);
+ return builder.toString();
+ } catch (IOException e) {
+ throw new FacesException(e.getMessage(), e);
+ }
+ }
- return functionString.toString();
+ public void appendScriptToStringBuilder(StringBuilder stringBuilder) {
+ try {
+ appendScript(stringBuilder);
+ } catch (IOException e) {
+ //ignore
+ }
}
-
+
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
@@ -44,4 +60,5 @@
public String toString() {
return toScript();
}
+
}
Modified: trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptUtils.java
===================================================================
--- trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptUtils.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/main/java/org/ajax4jsf/javascript/ScriptUtils.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -26,8 +26,8 @@
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.io.Writer;
import java.lang.reflect.Array;
+import java.nio.CharBuffer;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Collection;
@@ -66,7 +66,7 @@
return cs;
}
- private static void writeScriptToStream(Writer writer, Object obj, Map<Object,
Boolean> cycleBusterMap) throws IOException {
+ private static void appendScript(Appendable appendable, Object obj, Map<Object,
Boolean> cycleBusterMap) throws IOException {
Boolean cycleBusterValue = cycleBusterMap.put(obj, Boolean.TRUE);
if (cycleBusterValue != null) {
@@ -81,14 +81,14 @@
LOG.debug(formattedMessage);
}
- writer.write("null");
+ appendable.append("null");
} else if (null == obj) {
//TODO nick - skip non-rendered values like Integer.MIN_VALUE
- writer.write("null");
+ appendable.append("null");
} else if (obj instanceof ScriptString) {
- writer.write(((ScriptString) obj).toScript());
+ ((ScriptString) obj).appendScript(appendable);
} else if (obj.getClass().isArray()) {
- writer.write("[");
+ appendable.append("[");
boolean first = true;
@@ -96,20 +96,20 @@
Object element = Array.get(obj, i);
if (!first) {
- writer.write(',');
+ appendable.append(',');
}
- writeScriptToStream(writer, element, cycleBusterMap);
+ appendScript(appendable, element, cycleBusterMap);
first = false;
}
- writer.write("] ");
+ appendable.append("] ");
} else if (obj instanceof Collection<?>) {
// Collections put as JavaScript array.
@SuppressWarnings("unchecked") Collection<Object> collection
= (Collection<Object>) obj;
- writer.write("[");
+ appendable.append("[");
boolean first = true;
@@ -117,51 +117,51 @@
Object element = iter.next();
if (!first) {
- writer.write(',');
+ appendable.append(',');
}
- writeScriptToStream(writer, element, cycleBusterMap);
+ appendScript(appendable, element, cycleBusterMap);
first = false;
}
- writer.write("] ");
+ appendable.append("] ");
} else if (obj instanceof Map<?, ?>) {
// Maps put as JavaScript hash.
@SuppressWarnings("unchecked") Map<Object, Object> map =
(Map<Object, Object>) obj;
- writer.write("{");
+ appendable.append("{");
boolean first = true;
for (Map.Entry<Object, Object> entry : map.entrySet()) {
if (!first) {
- writer.write(',');
+ appendable.append(',');
}
- writeEncodedString(writer, entry.getKey());
- writer.write(":");
- writeScriptToStream(writer, entry.getValue(), cycleBusterMap);
+ appendEncodedString(appendable, entry.getKey());
+ appendable.append(":");
+ appendScript(appendable, entry.getValue(), cycleBusterMap);
first = false;
}
- writer.write("} ");
+ appendable.append("} ");
} else if (obj instanceof Number || obj instanceof Boolean) {
// numbers and boolean put as-is, without conversion
- writer.write(obj.toString());
+ appendable.append(obj.toString());
} else if (obj instanceof String) {
// all other put as encoded strings.
- writeEncodedString(writer, obj);
+ appendEncodedString(appendable, obj);
} else if (obj instanceof Enum<?>) {
// all other put as encoded strings.
- writeEncodedString(writer, obj);
+ appendEncodedString(appendable, obj);
} else {
// All other objects threaded as Java Beans.
- writer.write("{");
+ appendable.append("{");
PropertyDescriptor[] propertyDescriptors;
@@ -194,16 +194,16 @@
}
if (!first) {
- writer.write(',');
+ appendable.append(',');
}
- writeEncodedString(writer, key);
- writer.write(":");
- writeScriptToStream(writer, propertyValue, cycleBusterMap);
+ appendEncodedString(appendable, key);
+ appendable.append(":");
+ appendScript(appendable, propertyValue, cycleBusterMap);
first = false;
}
- writer.write("} ");
+ appendable.append("} ");
}
if (cycleBusterValue == null) {
@@ -220,7 +220,7 @@
* @throws IOException
*/
public static void writeToStream(final ResponseWriter responseWriter, Object obj)
throws IOException {
- writeScriptToStream(new ResponseWriterWrapper(responseWriter), obj, new
IdentityHashMap<Object, Boolean>());
+ appendScript(new ResponseWriterWrapper(responseWriter), obj, new
IdentityHashMap<Object, Boolean>());
}
/**
@@ -233,7 +233,7 @@
StringBuilder sb = new StringBuilder();
try {
- writeScriptToStream(new StringBuilderWriter(sb), obj, new
IdentityHashMap<Object, Boolean>());
+ appendScript(sb, obj, new IdentityHashMap<Object, Boolean>());
} catch (IOException e) {
// ignore
@@ -242,22 +242,17 @@
return sb.toString();
}
- public static void writeEncodedString(Writer w, Object obj) throws IOException {
- w.write("\"");
- writeEncoded(w, obj);
- w.write("\"");
+ public static void appendScript(Appendable appendable, Object obj) throws IOException
{
+ appendScript(appendable, obj, new IdentityHashMap<Object, Boolean>());
}
-
- public static void addEncodedString(StringBuilder buff, Object obj) {
- try {
- writeEncodedString(new StringBuilderWriter(buff), obj);
- } catch (IOException e) {
-
- // ignore
- }
+
+ public static void appendEncodedString(Appendable appendable, Object obj) throws
IOException {
+ appendable.append("\"");
+ appendEncoded(appendable, obj);
+ appendable.append("\"");
}
- public static void writeEncoded(Writer w, Object obj) throws IOException {
+ public static void appendEncoded(Appendable appendable, Object obj) throws
IOException {
JSEncoder encoder = new JSEncoder();
char[] chars = obj.toString().toCharArray();
@@ -265,22 +260,13 @@
char c = chars[i];
if (!encoder.compile(c)) {
- w.write(encoder.encode(c));
+ appendable.append(CharBuffer.wrap(encoder.encode(c)));
} else {
- w.write(c);
+ appendable.append(c);
}
}
}
- public static void addEncoded(StringBuilder buff, Object obj) {
- try {
- writeEncoded(new StringBuilderWriter(buff), obj);
- } catch (IOException e) {
-
- // ignore
- }
- }
-
public static String getValidJavascriptName(String s) {
StringBuffer buf = null;
final int len = s.length();
Modified: trunk/core/api/src/test/java/org/ajax4jsf/javascript/ScriptUtilsTest.java
===================================================================
--- trunk/core/api/src/test/java/org/ajax4jsf/javascript/ScriptUtilsTest.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/api/src/test/java/org/ajax4jsf/javascript/ScriptUtilsTest.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -246,21 +246,23 @@
/**
* Test method for {@link
org.ajax4jsf.javascript.ScriptUtils#addEncodedString(java.lang.StringBuffer,
java.lang.Object)}.
+ * @throws Exception
*/
- public void testAddEncodedString() {
+ public void testAddEncodedString() throws Exception {
StringBuilder buff = new StringBuilder();
- ScriptUtils.addEncodedString(buff, "foo");
+ ScriptUtils.appendEncodedString(buff, "foo");
assertEquals("\"foo\"", buff.toString());
}
/**
* Test method for {@link
org.ajax4jsf.javascript.ScriptUtils#addEncoded(java.lang.StringBuffer,
java.lang.Object)}.
+ * @throws Exception
*/
- public void testAddEncoded() {
+ public void testAddEncoded() throws Exception {
StringBuilder buff = new StringBuilder();
- ScriptUtils.addEncoded(buff, "foo");
+ ScriptUtils.appendEncoded(buff, "foo");
assertEquals("foo", buff.toString());
}
Modified:
trunk/core/impl/src/main/java/org/richfaces/application/push/impl/AbstractRequest.java
===================================================================
---
trunk/core/impl/src/main/java/org/richfaces/application/push/impl/AbstractRequest.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/core/impl/src/main/java/org/richfaces/application/push/impl/AbstractRequest.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -70,17 +70,31 @@
}
public String toScript() {
+ Map<String, Object> map = createScriptMap();
+
+ return ScriptUtils.toScript(map);
+ }
+
+ private Map<String, Object> createScriptMap() {
Map<String,Object> map = new HashMap<String, Object>(2);
map.put(TOPIC_KEY, topicKey.getTopicAddress());
map.put(DATA_KEY, new JSLiteral(serializedData));
-
- return ScriptUtils.toScript(map);
+ return map;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append(toScript());
+ public void appendScript(Appendable target) throws IOException {
+ target.append(toScript());
}
+
+ public void appendScriptToStringBuilder(StringBuilder stringBuilder) {
+ try {
+ appendScript(stringBuilder);
+ } catch (IOException e) {
+ //ignore
+ }
+ }
+
}
private static final class FlushMessagesTask implements Runnable {
Modified: trunk/core/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java
===================================================================
--- trunk/core/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/core/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -21,16 +21,18 @@
package org.richfaces.renderkit;
-import org.ajax4jsf.javascript.JSFunctionDefinition;
-import org.ajax4jsf.javascript.ScriptStringBase;
-import org.ajax4jsf.javascript.ScriptUtils;
-
-import javax.faces.component.UIComponent;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import javax.faces.component.UIComponent;
+
+import org.ajax4jsf.javascript.JSFunctionDefinition;
+import org.ajax4jsf.javascript.ScriptStringBase;
+import org.ajax4jsf.javascript.ScriptUtils;
+
/**
* @author Maksim Kaszynski
*/
@@ -42,8 +44,8 @@
this.component = component;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append(ScriptUtils.toScript(opts));
+ public void appendScript(Appendable target) throws IOException {
+ ScriptUtils.appendScript(target, opts);
}
public void addOption(String name) {
Modified: trunk/examples/iteration-demo/src/main/webapp/tree.xhtml
===================================================================
--- trunk/examples/iteration-demo/src/main/webapp/tree.xhtml 2010-11-18 16:37:36 UTC (rev
20102)
+++ trunk/examples/iteration-demo/src/main/webapp/tree.xhtml 2010-11-18 16:54:07 UTC (rev
20103)
@@ -3,7 +3,8 @@
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
-
xmlns:it="http://richfaces.org/iteration">
+
xmlns:it="http://richfaces.org/iteration"
+
xmlns:a4j="http://richfaces.org/a4j">
<f:view contentType="text/html" />
<h:head>
@@ -45,6 +46,7 @@
</h:form>
<h:form id="form">
+ Base tree:
<it:tree id="tree" nodeType="#{node.parent == null ?
'rootNode': 'childNode'}" var="node"
value="#{treeBean.rootNodes}"
selectionType="#{treeBean.selectionType}"
toggleType="#{treeBean.toggleType}"
selection="#{treeBean.selection}">
<it:treeNode type="rootNode">
@@ -73,6 +75,7 @@
<f:ajax render=":form:tree" execute="@all" />
</h:commandLink>
+ Tree with customized look:
<it:tree id="customizedTree" var="node"
value="#{treeBean.rootNodes}"
selectionType="#{treeBean.selectionType}"
toggleType="#{treeBean.toggleType}"
styleClass="#{treeBean.showCustomClasses ? 'customClass' :
''}">
@@ -83,9 +86,22 @@
</it:treeNode>
</it:tree>
+ Tree with default node:
<it:tree id="defaultNodeTree" var="node"
value="#{treeBean.rootNodes}"
selectionType="#{treeBean.selectionType}"
toggleType="#{treeBean.toggleType}">
</it:tree>
+
+ Tree with client-side event handlers:
+ <it:tree id="clientSideEventsTree" var="node"
value="#{treeBean.rootNodes}"
+ selectionType="#{treeBean.selectionType}"
toggleType="#{treeBean.toggleType}">
+
+ <it:treeNode ontoggle="RichFaces.log.info('Toggle event: target is - '
+ event.target.id)"
+ onselect="RichFaces.log.info('Select event: target is - ' +
event.target.id)">
+ #{node.data}
+ </it:treeNode>
+ </it:tree>
+
+ <a4j:log />
</h:form>
</h:body>
</html>
Modified: trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/AjaxEventOptions.java
===================================================================
---
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/AjaxEventOptions.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/AjaxEventOptions.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -21,6 +21,7 @@
package org.richfaces.renderkit;
+import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -40,8 +41,8 @@
private Map<String, Object> options = new HashMap<String, Object>();
- public void appendScript(StringBuffer functionString) {
- functionString.append(ScriptUtils.toScript(options));
+ public void appendScript(Appendable target) throws IOException {
+ ScriptUtils.appendScript(target, options);
}
public boolean isEmpty() {
Modified: trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/RenderKitUtils.java
===================================================================
---
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/RenderKitUtils.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/common/ui/src/main/java/org/richfaces/renderkit/RenderKitUtils.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -382,6 +382,7 @@
}
}
+ //TODO - create special method for event handlers that will return String?
public static Object getAttributeAndBehaviorsValue(FacesContext facesContext,
UIComponent component,
ComponentAttribute componentAttribute) {
if (facesContext == null) {
Modified:
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/AjaxFunctionRendererBase.java
===================================================================
---
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/AjaxFunctionRendererBase.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/core/ui/src/main/java/org/richfaces/renderkit/AjaxFunctionRendererBase.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -23,19 +23,20 @@
package org.richfaces.renderkit;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIParameter;
+import javax.faces.context.FacesContext;
+
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.javascript.ScriptUtils;
import org.richfaces.renderkit.util.AjaxRendererUtils;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIParameter;
-import javax.faces.context.FacesContext;
-import java.util.Iterator;
-import java.util.Map;
-
/**
* @author shura
*
@@ -48,7 +49,7 @@
throw new FacesException("Value of 'name' attribute of
a4j:jsFunction component is null!");
}
- StringBuffer script = new StringBuffer(functionName).append("=");
+ StringBuilder script = new StringBuilder(functionName).append("=");
JSFunctionDefinition func = new JSFunctionDefinition();
// func.setName(component.getName());
@@ -94,7 +95,7 @@
// TODO - added in 4.0 - ?
func.addParameter(JSReference.EVENT);
func.addToBody(ajaxFunction.toScript());
- func.appendScript(script);
+ func.appendScriptToStringBuilder(script);
return script.toString();
}
Modified: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/ClientSelectItem.java
===================================================================
---
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/ClientSelectItem.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/ClientSelectItem.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -22,6 +22,8 @@
package org.richfaces.renderkit;
+import java.io.IOException;
+
import org.ajax4jsf.javascript.ScriptString;
import org.ajax4jsf.javascript.ScriptUtils;
@@ -59,14 +61,23 @@
return convertedValue;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append(this.toScript());
+ public void appendScript(Appendable target) throws IOException {
+ target.append(this.toScript());
}
+ public void appendScriptToStringBuilder(StringBuilder stringBuilder) {
+ try {
+ appendScript(stringBuilder);
+ } catch (IOException e) {
+ //ignore
+ }
+ }
+
public String toScript() {
return "{ 'id' : " + ScriptUtils.toScript(clientId)
+ " , 'label' : " + ScriptUtils.toScript(label)
+ ", 'value' : " +
ScriptUtils.toScript(convertedValue)
+ "}";
}
+
}
Modified: trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -69,7 +69,8 @@
type = AbstractTree.COMPONENT_TYPE,
family = AbstractTree.COMPONENT_FAMILY,
tag = @Tag(name = "tree"),
- renderer = @JsfRenderer(type = "org.richfaces.TreeRenderer")
+ renderer = @JsfRenderer(type = "org.richfaces.TreeRenderer"),
+ attributes = {"events-props.xml", "core-props.xml",
"i18n-props.xml"}
)
public abstract class AbstractTree extends UIDataAdaptor implements
MetaComponentResolver, MetaComponentEncoder {
@@ -133,11 +134,6 @@
public abstract boolean isImmediate();
- @Override
- public String getFamily() {
- return COMPONENT_FAMILY;
- }
-
@Attribute(defaultValue = "SwitchType.DEFAULT")
public abstract SwitchType getToggleType();
@@ -146,8 +142,10 @@
public abstract String getNodeType();
- //TODO - move to template
- public abstract String getStyleClass();
+ @Override
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
public Collection<Object> getSelection() {
@SuppressWarnings("unchecked")
@@ -209,7 +207,6 @@
}
if (Strings.isNullOrEmpty(nodeType)) {
- //make PSS happy
if (getAttributes().put(DEFAULT_TREE_NODE_CREATED, Boolean.TRUE) != null) {
return null;
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -45,6 +45,7 @@
import org.richfaces.application.ServiceTracker;
import org.richfaces.appplication.FacesMessages;
import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.EventName;
import org.richfaces.cdk.annotations.JsfComponent;
import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.cdk.annotations.Tag;
@@ -63,7 +64,8 @@
type = AbstractTreeNode.COMPONENT_TYPE,
family = AbstractTreeNode.COMPONENT_FAMILY,
tag = @Tag(name = "treeNode"),
- renderer = @JsfRenderer(type = "org.richfaces.TreeNodeRenderer")
+ renderer = @JsfRenderer(type = "org.richfaces.TreeNodeRenderer"),
+ attributes = {"events-props.xml", "core-props.xml",
"i18n-props.xml"}
)
public abstract class AbstractTreeNode extends UIComponentBase implements
MetaComponentResolver, MetaComponentEncoder, IterationStateHolder {
@@ -91,9 +93,6 @@
public abstract String getType();
- //TODO - move to template
- public abstract String getStyleClass();
-
public abstract String getIconLeaf();
public abstract String getIconExpanded();
@@ -106,6 +105,9 @@
public abstract String getLabelClass();
+ @Attribute(events = @EventName("toggle"))
+ public abstract String getOntoggle();
+
protected Boolean getLocalExpandedValue(FacesContext facesContext) {
return (Boolean) getStateHelper().get(PropertyKeys.expanded);
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/DataScrollerBaseRenderer.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/DataScrollerBaseRenderer.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/DataScrollerBaseRenderer.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -321,9 +321,9 @@
function.addParameter(options);
- StringBuffer buffer = new StringBuffer();
- function.appendScript(buffer);
- definition.addToBody(buffer);
+ StringBuilder sb = new StringBuilder();
+ function.appendScriptToStringBuilder(sb);
+ definition.addToBody(sb);
return definition;
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderPartial.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderPartial.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeEncoderPartial.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -60,7 +60,8 @@
Object initialRowKey = tree.getRowKey();
try {
-
+ TreeRenderingContext.create(context, tree);
+
encodeTreeNode(rowKey, true);
prw.endUpdate();
@@ -71,6 +72,8 @@
} catch (Exception e) {
TreeRendererBase.LOGGER.error(e.getMessage(), e);
}
+
+ TreeRenderingContext.delete(context);
}
prw.startEval();
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -46,6 +46,10 @@
private static final String TRIGGER_NODE_AJAX_UPDATE =
"__TRIGGER_NODE_AJAX_UPDATE";
+ private static final ComponentAttribute ONTOGGLE_ATTRIBUTE = new
ComponentAttribute("ontoggle").setEventNames("toggle");
+
+ private static final ComponentAttribute ONSELECT_ATTRIBUTE = new
ComponentAttribute("onselect").setEventNames("select");
+
@Override
public void decode(FacesContext context, UIComponent component) {
super.decode(context, component);
@@ -144,4 +148,11 @@
encodeCustomIcon(context, treeNode, nodeState.getCustomIconClass(),
customIcon);
}
}
+
+ protected void addEventHandlersToRenderingContext(FacesContext facesContext,
UIComponent component) {
+ String ontoggle = (String)
RenderKitUtils.getAttributeAndBehaviorsValue(facesContext, component,
ONTOGGLE_ATTRIBUTE);
+ String onselect = (String)
RenderKitUtils.getAttributeAndBehaviorsValue(facesContext, component,
ONSELECT_ATTRIBUTE);
+
+ TreeRenderingContext.get(facesContext).addHandlers(ontoggle, null, onselect,
null);
+ }
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -271,4 +271,17 @@
+ AbstractTree.SELECTION_META_COMPONENT_ID);
}
}
+
+ protected void createTreeRenderingContext(FacesContext context, UIComponent
component) {
+ TreeRenderingContext.create(context, (AbstractTree) component);
+ }
+
+ protected Object getClientEventHandlers(FacesContext facesContext) {
+ TreeRenderingContext treeRenderingContext =
TreeRenderingContext.get(facesContext);
+ return treeRenderingContext.getHandlers();
+ }
+
+ protected void deleteTreeRenderingContext(FacesContext context) {
+ TreeRenderingContext.delete(context);
+ }
}
Added:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java
===================================================================
--- trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java
(rev 0)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -0,0 +1,143 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.renderkit;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.javascript.ScriptStringBase;
+import org.richfaces.component.AbstractTree;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public final class TreeRenderingContext {
+
+ private static final String ATTRIBUTE_NAME = TreeRenderingContext.class.getName() +
":ATTRIBUTE_NAME";
+
+ public static final class Handlers extends ScriptStringBase {
+
+ private String toggleHandler;
+
+ private String treeToggleHandler;
+
+ private String selectHandler;
+
+ private String treeSelectHandler;
+
+ public void setSelectHandler(String selectHandler) {
+ this.selectHandler = selectHandler;
+ }
+
+ public String getSelectHandler() {
+ return selectHandler;
+ }
+
+ public void setToggleHandler(String toggleHandler) {
+ this.toggleHandler = toggleHandler;
+ }
+
+ public String getToggleHandler() {
+ return toggleHandler;
+ }
+
+ public String getTreeToggleHandler() {
+ return treeToggleHandler;
+ }
+
+ public void setTreeToggleHandler(String treeToggleHandler) {
+ this.treeToggleHandler = treeToggleHandler;
+ }
+
+ public String getTreeSelectHandler() {
+ return treeSelectHandler;
+ }
+
+ public void setTreeSelectHandler(String treeSelectHandler) {
+ this.treeSelectHandler = treeSelectHandler;
+ }
+
+ public void appendScript(Appendable target) throws IOException {
+ // TODO Auto-generated method stub
+
+ }
+ }
+
+ private FacesContext context;
+
+ private AbstractTree tree;
+
+ private String baseClientId;
+
+ private Map<String, Handlers> handlersMap = new HashMap<String,
Handlers>();
+
+ private TreeRenderingContext(FacesContext context, AbstractTree tree) {
+ super();
+ this.context = context;
+ this.tree = tree;
+ this.baseClientId = tree.getClientId(context);
+ }
+
+ public static TreeRenderingContext create(FacesContext context, AbstractTree tree) {
+ TreeRenderingContext renderingContext = new TreeRenderingContext(context, tree);
+ context.getAttributes().put(ATTRIBUTE_NAME, renderingContext);
+ return renderingContext;
+ }
+
+ public static TreeRenderingContext get(FacesContext context) {
+ return (TreeRenderingContext) context.getAttributes().get(ATTRIBUTE_NAME);
+ }
+
+ public static void delete(FacesContext context) {
+ context.getAttributes().remove(ATTRIBUTE_NAME);
+ }
+
+ public void addHandlers(String toggleHandler, String treeToggleHandler, String
selectHandler, String treeSelectHandler) {
+ String clientId = tree.findTreeNodeComponent().getClientId(context);
+
+ String relativeClientId = clientId.substring(baseClientId.length());
+
+ if (isNullOrEmpty(toggleHandler) && isNullOrEmpty(treeToggleHandler)
+ && isNullOrEmpty(selectHandler) &&
isNullOrEmpty(treeSelectHandler)) {
+
+ return;
+ }
+
+ Handlers handlers = new Handlers();
+ handlers.setToggleHandler(toggleHandler);
+ handlers.setTreeToggleHandler(treeToggleHandler);
+ handlers.setSelectHandler(selectHandler);
+ handlers.setTreeSelectHandler(treeSelectHandler);
+
+ handlersMap.put(relativeClientId, handlers);
+ }
+
+ public Object getHandlers() {
+ return handlersMap;
+ }
+}
Modified:
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/tree.js
===================================================================
---
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/tree.js 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/tree.js 2010-11-18
16:54:07 UTC (rev 20103)
@@ -39,12 +39,14 @@
name: "TreeNode",
- init: function (id) {
+ init: function (id, commonOptions) {
this.__rootElt = $(this.attachToDom(id));
this.__children = new Array();
- this.__initializeChildren();
+ this.__initializeChildren(commonOptions);
+
+ this.__clientEventHandlers = (commonOptions.clientEventHandlers ||
{})[commonOptions.treeId + id];
},
destroy: function() {
@@ -60,10 +62,10 @@
this.__rootElt = null;
},
- __initializeChildren: function() {
+ __initializeChildren: function(commonOptions) {
var _this = this;
this.__rootElt.children(".rf-tr-nd").each(function() {
- _this.addChild(new richfaces.ui.TreeNode(this));
+ _this.addChild(new richfaces.ui.TreeNode(this, commonOptions));
});
},
@@ -216,7 +218,7 @@
});
- richfaces.ui.TreeNode.initNodeByAjax = function(nodeId) {
+ richfaces.ui.TreeNode.initNodeByAjax = function(nodeId, commonOptions) {
var node = $(document.getElementById(nodeId));
if (node.nextAll(".rf-tr-nd:first").length != 0) {
@@ -228,7 +230,7 @@
var idx = node.prevAll(".rf-tr-nd").length;
var parentNode = richfaces.$(parent[0]);
- var newChild = new richfaces.ui.TreeNode(node[0]);
+ var newChild = new richfaces.ui.TreeNode(node[0], commonOptions);
parentNode.addChild(newChild, idx);
parentNode.getTree().__updateSelection();
};
@@ -252,8 +254,12 @@
init: function (id, options) {
this.__treeRootElt = $(richfaces.getDomElement(id));
- this.$super.init.call(this, this.__treeRootElt);
+ var commonOptions = {};
+ commonOptions.clientEventHandlers = options.clientEventHandlers || {};
+ commonOptions.treeId = id;
+ this.$super.init.call(this, this.__treeRootElt, commonOptions);
+
this.__toggleType = options.toggleType || 'ajax';
this.__selectionType = options.selectionType || 'client';
Modified: trunk/ui/iteration/ui/src/main/templates/tree.template.xml
===================================================================
--- trunk/ui/iteration/ui/src/main/templates/tree.template.xml 2010-11-18 16:37:36 UTC
(rev 20102)
+++ trunk/ui/iteration/ui/src/main/templates/tree.template.xml 2010-11-18 16:54:07 UTC
(rev 20103)
@@ -16,16 +16,26 @@
<cdk:resource-dependency name="tree.js"
library="org.richfaces" />
<cdk:resource-dependency name="tree.ecss"
library="org.richfaces" />
+ <cdk:import-attributes src="urn:attributes:events-props.xml"/>
+ <cdk:import-attributes src="urn:attributes:core-props.xml"/>
+ <cdk:import-attributes src="urn:attributes:i18n-props.xml"/>
+
<cdk:import package="org.richfaces.component"
names="SwitchType" />
</cc:interface>
<cc:implementation>
<div id="#{clientId}" class="#{concatClasses('rf-tr',
component.attributes['styleClass'])}"
cdk:passThroughWithExclusions="">
+
+ <cdk:call expression="createTreeRenderingContext(facesContext,
component)" />
+
<cdk:body>
<cdk:call expression="encodeTree(facesContext, component)"
/>
</cdk:body>
+ <cdk:object name="clientEventHandlers"
value="#{getClientEventHandlers(facesContext)}" />
+ <cdk:call expression="deleteTreeRenderingContext(facesContext)"
/>
+
<cdk:call expression="encodeSelectionStateInput(facesContext,
component)" />
<script type="text/javascript">
@@ -33,6 +43,7 @@
<cdk:scriptOption attributes="toggleType"
defaultValue="SwitchType.DEFAULT" />
<cdk:scriptOption name="selectionType"
value="#{getSelectionMode(facesContext, component)}"
defaultValue="SwitchType.client" />
<cdk:scriptOption name="ajaxSubmitFunction"
value="#{getAjaxSubmitFunction(facesContext, component)}" />
+ <cdk:scriptOption variables="clientEventHandlers" />
</cdk:scriptObject>
new RichFaces.ui.Tree(#{toScriptArgs(clientId, options)});
Modified: trunk/ui/iteration/ui/src/main/templates/treeNode.template.xml
===================================================================
--- trunk/ui/iteration/ui/src/main/templates/treeNode.template.xml 2010-11-18 16:37:36 UTC
(rev 20102)
+++ trunk/ui/iteration/ui/src/main/templates/treeNode.template.xml 2010-11-18 16:54:07 UTC
(rev 20103)
@@ -13,6 +13,10 @@
</cdk:component-family>
<cdk:renderer-type>org.richfaces.TreeNodeRenderer
</cdk:renderer-type>
+
+ <cdk:import-attributes src="urn:attributes:events-props.xml"/>
+ <cdk:import-attributes src="urn:attributes:core-props.xml"/>
+ <cdk:import-attributes src="urn:attributes:i18n-props.xml"/>
</cc:interface>
<cc:implementation>
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PopupPanelBaseRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PopupPanelBaseRenderer.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PopupPanelBaseRenderer.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -206,7 +206,7 @@
addToScriptHash(options, "onbeforeshow",
buildEventFunction(attributes.get("onbeforeshow")));
addToScriptHash(options, "onbeforehide",
buildEventFunction(attributes.get("onbeforehide")));
- result.append(ScriptUtils.toScript(options));
+ ScriptUtils.appendScript(result, options);
result.append(");");
return result.toString();
}
Modified:
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java
===================================================================
---
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -36,35 +36,35 @@
@Override
protected Object buildBody() {
- StringBuffer body = new StringBuffer();
+ StringBuilder body = new StringBuilder();
// Get component value by clientId.
body.append("var
").append(ClientValidatorRenderer.VALUE_VAR).append("=");
- GET_VALUE_FUNCTION.appendScript(body);
+ GET_VALUE_FUNCTION.appendScriptToStringBuilder(body);
body.append(EOL);
// Try client-side validation
body.append("try {\n");
// convert value
body.append("var
").append(ClientValidatorRenderer.CONVERTED_VALUE_VAR).append("=");
- converter.appendScript(body);
+ converter.appendScriptToStringBuilder(body);
body.append(EOL);
// call validators
for (LibraryScriptString validatorScript : validators) {
- validatorScript.appendScript(body);
+ validatorScript.appendScriptToStringBuilder(body);
body.append(EOL);
}
finishValidation(body);
body.append("return true;\n");
// Catch errors
body.append("} catch(e) {\n");
- SEND_ERROR_FUNCTION.appendScript(body);body.append(EOL);
+ SEND_ERROR_FUNCTION.appendScriptToStringBuilder(body);body.append(EOL);
body.append("return false;\n}");
return body;
}
- protected void finishValidation(StringBuffer body) {
+ protected void finishValidation(StringBuilder body) {
// clear messages after successful validation
body.append("if(!").append(DISABLE_AJAX).append("){\n");
- CLEAR_ERROR_FUNCTION.appendScript(body);
+ CLEAR_ERROR_FUNCTION.appendScriptToStringBuilder(body);
body.append(EOL).append("}\n");
}
Modified:
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ValidatorScriptBase.java
===================================================================
---
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ValidatorScriptBase.java 2010-11-18
16:37:36 UTC (rev 20102)
+++
trunk/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ValidatorScriptBase.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -1,5 +1,7 @@
package org.richfaces.renderkit.html;
+import java.io.IOException;
+
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSLiteral;
@@ -29,13 +31,13 @@
super(CLIENT_ID,ELEMENT,EVENT,DISABLE_AJAX);
}
- public void appendScript(StringBuffer functionString) {
+ public void appendScript(Appendable target) throws IOException {
if(!bodyProcessed){
// pending RF-9565
addToBody(buildBody());
bodyProcessed = true;
}
- super.appendScript(functionString);
+ super.appendScript(target);
}
protected abstract Object buildBody();
Modified: trunk/ui/validator/ui/src/test/java/org/richfaces/component/Bean.java
===================================================================
--- trunk/ui/validator/ui/src/test/java/org/richfaces/component/Bean.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/ui/validator/ui/src/test/java/org/richfaces/component/Bean.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -3,6 +3,7 @@
*/
package org.richfaces.component;
+import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
@@ -36,10 +37,18 @@
return TEST_SCRIPT;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append(TEST_SCRIPT);
+ public void appendScript(Appendable target) throws IOException {
+ target.append(TEST_SCRIPT);
}
+ public void appendScriptToStringBuilder(StringBuilder stringBuilder) {
+ try {
+ appendScript(stringBuilder);
+ } catch (IOException e) {
+ //ignore
+ }
+ }
+
public Collection<LibraryResource> getResources() {
return Collections.singleton(TEST_RESOURCE);
}
@@ -51,6 +60,7 @@
public String createCallScript(String clientId,String sourceId) {
return FOO+"("+clientId+")";
}
+
};
private String value=FOO_VALUE;
Modified: trunk/ui/validator/ui/src/test/java/org/richfaces/component/Script.java
===================================================================
--- trunk/ui/validator/ui/src/test/java/org/richfaces/component/Script.java 2010-11-18
16:37:36 UTC (rev 20102)
+++ trunk/ui/validator/ui/src/test/java/org/richfaces/component/Script.java 2010-11-18
16:54:07 UTC (rev 20103)
@@ -1,5 +1,7 @@
package org.richfaces.component;
+import java.io.IOException;
+
import org.richfaces.validator.LibraryResource;
import org.richfaces.validator.LibraryScriptString;
@@ -14,11 +16,18 @@
return name;
}
- public void appendScript(StringBuffer functionString) {
- functionString.append(name);
-
+ public void appendScript(Appendable target) throws IOException {
+ target.append(name);
}
+ public void appendScriptToStringBuilder(StringBuilder stringBuilder) {
+ try {
+ appendScript(stringBuilder);
+ } catch (IOException e) {
+ //ignore
+ }
+ }
+
public LibraryResource getResource() {
return UIValidatorScriptCollectionTest.FOO_RESOURCE;
}