You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2018/12/05 17:22:15 UTC
[myfaces] 01/02: MYFACES-4272 [perf] avoid FormInfo instances
This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces.git
commit 5704e80bf22c156e2364c2bb50606e93e92ab4cd
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Wed Dec 5 17:47:33 2018 +0100
MYFACES-4272 [perf] avoid FormInfo instances
---
.../apache/myfaces/renderkit/RendererUtils.java | 26 ----------------------
.../renderkit/html/HtmlCommandScriptRenderer.java | 5 +++--
.../html/base/HtmlButtonRendererBase.java | 15 +++++++------
.../html/base/HtmlInputFileRendererBase.java | 5 +++--
.../renderkit/html/base/HtmlLinkRendererBase.java | 12 +++++-----
.../renderkit/html/base/HtmlRadioRendererBase.java | 5 +++--
.../renderkit/html/base/HtmlRendererUtils.java | 3 ++-
.../facelets/component/JsfElementRenderer.java | 5 +++++
8 files changed, 30 insertions(+), 46 deletions(-)
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
index d30b39c..50e7067 100755
--- a/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
@@ -41,7 +41,6 @@ import javax.faces.application.Resource;
import javax.faces.application.ResourceHandler;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
import javax.faces.component.UIOutput;
import javax.faces.component.UISelectMany;
import javax.faces.component.UISelectOne;
@@ -861,31 +860,6 @@ public final class RendererUtils
return i != null ? i.intValue() : defaultValue;
}
- /**
- * Find the enclosing form of a component
- * in the view-tree.
- * All Subclasses of <code>UIForm</code> and all known
- * form-families are searched for.
- * <p>
- * There might be additional form families
- * which have to be explicitly entered here.</p>
- *
- * @param uiComponent
- * @param facesContext
- * @return FormInfo Information about the form - the form itself and its name.
- */
- public static UIComponent findNestingForm(UIComponent uiComponent,
- FacesContext facesContext)
- {
- UIComponent parent = uiComponent.getParent();
- while (parent != null && !(parent instanceof UIForm))
- {
- parent = parent.getParent();
- }
-
- return parent;
- }
-
public static boolean getBooleanValue(String attribute, Object value,
boolean defaultValue)
{
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java
index abb1ef1..0f047f7 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java
@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.RandomAccess;
import java.util.Set;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
import javax.faces.component.UIParameter;
import javax.faces.component.behavior.AjaxBehavior;
import javax.faces.component.behavior.ClientBehaviorContext;
@@ -40,13 +41,13 @@ import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.event.ActionEvent;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
-import org.apache.myfaces.renderkit.RendererUtils;
import org.apache.myfaces.renderkit.html.util.HTML;
import org.apache.myfaces.renderkit.html.base.HtmlRenderer;
import org.apache.myfaces.renderkit.html.base.HtmlRendererUtils;
import org.apache.myfaces.renderkit.html.util.JavascriptContext;
import org.apache.myfaces.renderkit.html.util.JavascriptUtils;
import org.apache.myfaces.renderkit.html.util.ResourceUtils;
+import org.apache.myfaces.util.ComponentUtils;
import org.apache.myfaces.util.SharedStringBuilder;
import org.apache.myfaces.util.StringUtils;
@@ -179,7 +180,7 @@ public class HtmlCommandScriptRenderer extends HtmlRenderer
if (component.getClientId(facesContext).equals(clientId))
{
boolean disabled = HtmlRendererUtils.isDisabled(component);
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
boolean activateActionEvent = false;
if (form != null && !disabled)
{
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
index 37311a2..9c80bdb 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
@@ -27,6 +27,7 @@ import java.util.Map;
import javax.faces.component.UICommand;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
import javax.faces.component.UIParameter;
import javax.faces.component.ValueHolder;
import javax.faces.component.behavior.ClientBehavior;
@@ -44,6 +45,7 @@ import org.apache.myfaces.renderkit.RendererUtils;
import org.apache.myfaces.renderkit.html.util.JavascriptUtils;
import org.apache.myfaces.renderkit.html.util.ResourceUtils;
import org.apache.myfaces.renderkit.html.util.HTML;
+import org.apache.myfaces.util.ComponentUtils;
public class HtmlButtonRendererBase
extends HtmlRenderer
@@ -87,9 +89,9 @@ public class HtmlButtonRendererBase
{
String clientId = uiComponent.getClientId(facesContext);
Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
- UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
String hiddenLink = null;
-
+
+ UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
if (form != null)
{
hiddenLink = (String) facesContext.getExternalContext().getRequestParameterMap().get(
@@ -112,7 +114,7 @@ public class HtmlButtonRendererBase
ResponseWriter writer = facesContext.getResponseWriter();
// commandButton does not need to be nested in a form since JSF 2.0
- UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
boolean reset = isReset(uiComponent);
boolean button = isButton(uiComponent);
@@ -276,7 +278,7 @@ public class HtmlButtonRendererBase
writer.endElement(HTML.INPUT_ELEM);
- UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
if (form != null)
{
HtmlFormRendererBase.renderScrollHiddenInputIfNecessary(
@@ -472,9 +474,8 @@ public class HtmlButtonRendererBase
onClick.append(';');
onClick.append("var oamSF = function(){");
}
-
- UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
-
+
+ UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
if (form != null)
{
if (validParams != null && !validParams.isEmpty() )
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
index d8155f4..f25c3a0 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
@@ -37,17 +37,18 @@ import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.application.ProjectStage;
+import javax.faces.component.UIForm;
import javax.faces.component.UIViewRoot;
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorHolder;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlInputText;
-import org.apache.myfaces.renderkit.RendererUtils;
import org.apache.myfaces.renderkit.html.util.HttpPartWrapper;
import org.apache.myfaces.renderkit.html.util.HTML;
import org.apache.myfaces.renderkit.html.util.JSFAttr;
import org.apache.myfaces.util.Assert;
+import org.apache.myfaces.util.ComponentUtils;
public class HtmlInputFileRendererBase extends HtmlRenderer
{
@@ -96,7 +97,7 @@ public class HtmlInputFileRendererBase extends HtmlRenderer
(facesContext.getPartialViewContext().isPartialRequest() ||
facesContext.getPartialViewContext().isAjaxRequest()))
{
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
if (form != null && form instanceof HtmlForm)
{
String content = ((HtmlForm) form).getEnctype();
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
index e5e53e4..0340b87 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
@@ -31,6 +31,7 @@ import java.util.RandomAccess;
import javax.faces.component.UICommand;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
import javax.faces.component.UIOutcomeTarget;
import javax.faces.component.UIOutput;
import javax.faces.component.UIParameter;
@@ -50,6 +51,7 @@ import org.apache.myfaces.renderkit.html.util.JSFAttr;
import org.apache.myfaces.renderkit.RendererUtils;
import org.apache.myfaces.renderkit.html.util.ResourceUtils;
import org.apache.myfaces.renderkit.html.util.HTML;
+import org.apache.myfaces.util.ComponentUtils;
public abstract class HtmlLinkRendererBase
extends HtmlRenderer
@@ -74,7 +76,7 @@ public abstract class HtmlLinkRendererBase
if (component instanceof UICommand)
{
String clientId = component.getClientId(facesContext);
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
boolean disabled = HtmlRendererUtils.isDisabled(component);
// MYFACES-3960 Decode, decode client behavior and queue action event at the end
boolean activateActionEvent = false;
@@ -190,8 +192,7 @@ public abstract class HtmlLinkRendererBase
{
renderCommandLinkEnd(facesContext, component);
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
-
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
if (form != null)
{
HtmlFormRendererBase.renderScrollHiddenInputIfNecessary(
@@ -223,7 +224,7 @@ public abstract class HtmlLinkRendererBase
Map<String, List<ClientBehavior>> behaviors = null;
// h:commandLink can be rendered outside a form, but with warning (jsf 2.0 TCK)
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
boolean disabled = HtmlRendererUtils.isDisabled(component);
@@ -1157,12 +1158,11 @@ public abstract class HtmlLinkRendererBase
protected void renderCommandLinkEnd(FacesContext facesContext, UIComponent component)
throws IOException
{
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
ResponseWriter writer = facesContext.getResponseWriter();
if (HtmlRendererUtils.isDisabled(component) || form == null)
{
-
writer.endElement(HTML.SPAN_ELEM);
}
else
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
index ccd786d..3ee5e68 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
@@ -32,6 +32,7 @@ import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
import javax.faces.component.UIInput;
import javax.faces.component.UISelectOne;
import javax.faces.component.behavior.ClientBehavior;
@@ -142,7 +143,7 @@ public class HtmlRadioRendererBase
else
{
// Deferred case: find real component with attached selectItems
- UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
GetSelectItemListCallback callback = new GetSelectItemListCallback(selectOne, group);
form.visitTree(
VisitContext.createVisitContext(facesContext, null, FIND_SELECT_LIST_HINTS),
@@ -409,7 +410,7 @@ public class HtmlRadioRendererBase
String group = uiComponent instanceof HtmlSelectOneRadio ? ((HtmlSelectOneRadio) uiComponent).getGroup() : null;
if (group != null && !group.isEmpty())
{
- UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
writer.writeAttribute(HTML.NAME_ATTR, form.getClientId(facesContext) +
facesContext.getNamingContainerSeparatorChar() + group, null);
}
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java
index 0fb054d..0db240a 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java
@@ -37,6 +37,7 @@ import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
import javax.faces.component.UIInput;
import javax.faces.component.UIOutcomeTarget;
import javax.faces.component.UIOutput;
@@ -256,7 +257,7 @@ public final class HtmlRendererUtils
String group = ((UISelectOne) component).getGroup();
if (group != null && !group.isEmpty())
{
- UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+ UIForm form = ComponentUtils.closest(UIForm.class, component);
String fullGroupId = form.getClientId(facesContext) +
facesContext.getNamingContainerSeparatorChar() + group;
if (paramMap.containsKey(fullGroupId))
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java b/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java
index cdcb0c2..d3da6ed 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java
@@ -62,6 +62,7 @@ public class JsfElementRenderer extends HtmlRenderer
HtmlRendererUtils.decodeClientBehaviors(context, component);
}
+ @Override
public void encodeBegin(FacesContext facesContext, UIComponent component)
throws IOException
{
@@ -118,12 +119,14 @@ public class JsfElementRenderer extends HtmlRenderer
}
+ @Override
public void encodeChildren(FacesContext facesContext, UIComponent component)
throws IOException
{
RendererUtils.renderChildren(facesContext, component);
}
+ @Override
public void encodeEnd(FacesContext facesContext, UIComponent component)
throws IOException
{
@@ -133,11 +136,13 @@ public class JsfElementRenderer extends HtmlRenderer
writer.endElement(elementName);
}
+ @Override
protected boolean isCommonPropertiesOptimizationEnabled(FacesContext facesContext)
{
return true;
}
+ @Override
protected boolean isCommonEventsOptimizationEnabled(FacesContext facesContext)
{
return true;