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 2012/03/06 18:51:14 UTC
svn commit: r1297609 -
/myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java
Author: lu4242
Date: Tue Mar 6 17:51:13 2012
New Revision: 1297609
URL: http://svn.apache.org/viewvc?rev=1297609&view=rev
Log:
MYFACES-3144 [PERF] Cache renderer in UIComponentBase
Modified:
myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java
Modified: myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java?rev=1297609&r1=1297608&r2=1297609&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java (original)
+++ myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java Tue Mar 6 17:51:13 2012
@@ -122,6 +122,8 @@ public abstract class UIComponentBase ex
private transient Map<String, List<ClientBehavior>> _unmodifiableBehaviorsMap = null;
private transient FacesContext _facesContext;
+ private transient Boolean _cachedIsRendered;
+ private transient Renderer _cachedRenderer;
public UIComponentBase()
{
@@ -467,14 +469,80 @@ public abstract class UIComponentBase ex
throw new NullPointerException("context");
}
+ setCachedRenderer(null);
Renderer renderer = getRenderer(context);
if (renderer != null)
{
- renderer.decode(context, this);
+ setCachedRenderer(renderer);
+ try
+ {
+ renderer.decode(context, this);
+ }
+ finally
+ {
+ setCachedRenderer(null);
+ }
}
}
+ public void encodeAll(FacesContext context) throws IOException
+ {
+ if (context == null)
+ {
+ throw new NullPointerException();
+ }
+
+ pushComponentToEL(context, this);
+ try
+ {
+ setCachedIsRendered(null);
+ boolean rendered = isRendered();
+ setCachedIsRendered(rendered);
+ if (!rendered)
+ {
+ setCachedIsRendered(null);
+ return;
+ }
+ setCachedRenderer(null);
+ setCachedRenderer(getRenderer(context));
+ }
+ finally
+ {
+ popComponentFromEL(context);
+ }
+
+ try
+ {
+ //if (isRendered()) {
+ this.encodeBegin(context);
+
+ // rendering children
+ if (this.getRendersChildren())
+ {
+ this.encodeChildren(context);
+ } // let children render itself
+ else
+ {
+ if (this.getChildCount() > 0)
+ {
+ for (int i = 0; i < this.getChildCount(); i++)
+ {
+ UIComponent comp = this.getChildren().get(i);
+ comp.encodeAll(context);
+ }
+ }
+ }
+ this.encodeEnd(context);
+ //}
+ }
+ finally
+ {
+ setCachedIsRendered(null);
+ setCachedRenderer(null);
+ }
+ }
+
@Override
public void encodeBegin(FacesContext context) throws IOException
{
@@ -1103,6 +1171,10 @@ public abstract class UIComponentBase ex
@JSFProperty
public boolean isRendered()
{
+ if (_cachedIsRendered != null)
+ {
+ return Boolean.TRUE.equals(_cachedIsRendered);
+ }
return (Boolean) getStateHelper().eval(PropertyKeys.rendered, DEFAULT_RENDERED);
}
@@ -1210,6 +1282,11 @@ public abstract class UIComponentBase ex
{
throw new NullPointerException("context");
}
+ Renderer renderer = getCachedRenderer();
+ if (renderer != null)
+ {
+ return renderer;
+ }
String rendererType = getRendererType();
if (rendererType == null)
{
@@ -1217,7 +1294,7 @@ public abstract class UIComponentBase ex
}
RenderKit renderKit = context.getRenderKit();
- Renderer renderer = renderKit.getRenderer(getFamily(), rendererType);
+ renderer = renderKit.getRenderer(getFamily(), rendererType);
if (renderer == null)
{
String location = getComponentLocation(this);
@@ -2300,6 +2377,26 @@ public abstract class UIComponentBase ex
_facesContext = facesContext;
}
+ Renderer getCachedRenderer()
+ {
+ return _cachedRenderer;
+ }
+
+ void setCachedRenderer(Renderer renderer)
+ {
+ _cachedRenderer = renderer;
+ }
+
+ Boolean isCachedIsRendered()
+ {
+ return _cachedIsRendered;
+ }
+
+ void setCachedIsRendered(Boolean rendered)
+ {
+ _cachedIsRendered = rendered;
+ }
+
<T> T getExpressionValue(String attribute, T explizitValue, T defaultValueIfExpressionNull)
{
return _ComponentUtils.getExpressionValue(this, attribute, explizitValue, defaultValueIfExpressionNull);
@@ -2382,7 +2479,8 @@ public abstract class UIComponentBase ex
@Override
public void setRendered(boolean rendered)
{
- getStateHelper().put(PropertyKeys.rendered, rendered );
+ getStateHelper().put(PropertyKeys.rendered, rendered );
+ setCachedIsRendered(null);
}
@Override
@@ -2395,6 +2493,7 @@ public abstract class UIComponentBase ex
//should be included on the delta
this._isRendererTypeSet = true;
}
+ setCachedRenderer(null);
}
// ------------------ GENERATED CODE END ---------------------------------------