You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2008/04/15 02:32:11 UTC
svn commit: r648079 - in /myfaces/core/trunk_1.2.x/api/src/main:
java-templates/javax/faces/component/UIDataTemplate.java
java-templates/javax/faces/component/UIViewRootTemplate.java
java/javax/faces/component/UIComponentBase.java
Author: lu4242
Date: Mon Apr 14 17:32:09 2008
New Revision: 648079
URL: http://svn.apache.org/viewvc?rev=648079&view=rev
Log:
fix MYFACES-1862 Use ThreadLocal StringBuilder for create ids on getClientId, like in trinidad for 12
Modified:
myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIDataTemplate.java
myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIViewRootTemplate.java
myfaces/core/trunk_1.2.x/api/src/main/java/javax/faces/component/UIComponentBase.java
Modified: myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIDataTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIDataTemplate.java?rev=648079&r1=648078&r2=648079&view=diff
==============================================================================
--- myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIDataTemplate.java (original)
+++ myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIDataTemplate.java Mon Apr 14 17:32:09 2008
@@ -492,7 +492,9 @@
{
return clientId;
}
- return clientId + NamingContainer.SEPARATOR_CHAR + rowIndex;
+
+ StringBuilder bld = __getSharedStringBuilder();
+ return bld.append(clientId).append(NamingContainer.SEPARATOR_CHAR).append(rowIndex).toString();
}
/**
Modified: myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIViewRootTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIViewRootTemplate.java?rev=648079&r1=648078&r2=648079&view=diff
==============================================================================
--- myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIViewRootTemplate.java (original)
+++ myfaces/core/trunk_1.2.x/api/src/main/java-templates/javax/faces/component/UIViewRootTemplate.java Mon Apr 14 17:32:09 2008
@@ -156,7 +156,8 @@
public String createUniqueId()
{
ExternalContext extCtx = FacesContext.getCurrentInstance().getExternalContext();
- return extCtx.encodeNamespace(UNIQUE_ID_PREFIX + _uniqueIdCounter++);
+ StringBuilder bld = __getSharedStringBuilder();
+ return extCtx.encodeNamespace(bld.append(UNIQUE_ID_PREFIX).append(_uniqueIdCounter++).toString());
}
/**
Modified: myfaces/core/trunk_1.2.x/api/src/main/java/javax/faces/component/UIComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk_1.2.x/api/src/main/java/javax/faces/component/UIComponentBase.java?rev=648079&r1=648078&r2=648079&view=diff
==============================================================================
--- myfaces/core/trunk_1.2.x/api/src/main/java/javax/faces/component/UIComponentBase.java (original)
+++ myfaces/core/trunk_1.2.x/api/src/main/java/javax/faces/component/UIComponentBase.java Mon Apr 14 17:32:09 2008
@@ -58,7 +58,10 @@
extends UIComponent
{
private static Log log = LogFactory.getLog(UIComponentBase.class);
-
+
+ private static final ThreadLocal<StringBuilder> _STRING_BUILDER =
+ new ThreadLocal<StringBuilder>();
+
private _ComponentAttributesMap _attributesMap = null;
private List<UIComponent> _childrenList = null;
private Map<String,UIComponent> _facetMap = null;
@@ -220,7 +223,8 @@
String containerClientId = namingContainer.getContainerClientId(context);
if (containerClientId != null )
{
- _clientId = containerClientId + NamingContainer.SEPARATOR_CHAR + id;
+ StringBuilder bld = __getSharedStringBuilder();
+ _clientId = bld.append(containerClientId).append(NamingContainer.SEPARATOR_CHAR).append(id).toString();
}
else
{
@@ -1114,6 +1118,56 @@
{
return _ComponentUtils.getExpressionValue(this, attribute, explizitValue, defaultValueIfExpressionNull);
}
+
+ /**
+ * <p>
+ * This gets a single threadlocal shared stringbuilder instance, each time you call
+ * __getSharedStringBuilder it sets the length of the stringBuilder instance to 0.
+ * </p><p>
+ * This allows you to use the same StringBuilder instance over and over.
+ * You must call toString on the instance before calling __getSharedStringBuilder again.
+ * </p>
+ * Example that works
+ * <pre><code>
+ * StringBuilder sb1 = __getSharedStringBuilder();
+ * sb1.append(a).append(b);
+ * String c = sb1.toString();
+ *
+ * StringBuilder sb2 = __getSharedStringBuilder();
+ * sb2.append(b).append(a);
+ * String d = sb2.toString();
+ * </code></pre>
+ * <br><br>
+ * Example that doesn't work, you must call toString on sb1 before
+ * calling __getSharedStringBuilder again.
+ * <pre><code>
+ * StringBuilder sb1 = __getSharedStringBuilder();
+ * StringBuilder sb2 = __getSharedStringBuilder();
+ *
+ * sb1.append(a).append(b);
+ * String c = sb1.toString();
+ *
+ * sb2.append(b).append(a);
+ * String d = sb2.toString();
+ * </code></pre>
+ *
+ */
+ static StringBuilder __getSharedStringBuilder()
+ {
+ StringBuilder sb = _STRING_BUILDER.get();
+
+ if (sb == null)
+ {
+ sb = new StringBuilder();
+ _STRING_BUILDER.set(sb);
+ }
+
+ // clear out the stringBuilder by setting the length to 0
+ sb.setLength(0);
+
+ return sb;
+ }
+
//------------------ GENERATED CODE BEGIN (do not modify!) --------------------