You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2021/03/20 13:34:21 UTC

[myfaces-tobago] 04/04: chore: refactor ComponentUtils -> RendererBase

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit c538d5b41c8f64de7ed34c7255c9ca63a3dc6624
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 19 18:58:47 2021 +0100

    chore: refactor ComponentUtils -> RendererBase
---
 .../myfaces/tobago/renderkit/RendererBase.java     | 39 ++++++++++++++++++++--
 .../apache/myfaces/tobago/util/ComponentUtils.java | 29 +++-------------
 2 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
index 2222a9a..7e6a6a1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/RendererBase.java
@@ -50,6 +50,7 @@ import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.el.ValueExpression;
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
@@ -130,7 +131,7 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
     if (!(submittedValue instanceof String)) {
       return submittedValue;
     }
-    final Converter converter = ComponentUtils.getConverter(context, component, submittedValue);
+    final Converter converter = getConverter(context, component, submittedValue);
     if (converter != null) {
       return converter.getAsObject(context, component, (String) submittedValue);
     } else {
@@ -479,11 +480,45 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
       return "";
     }
 
-    final Converter converter = ComponentUtils.getConverter(facesContext, component, currentValue);
+    final Converter converter = getConverter(facesContext, component, currentValue);
     if (converter != null) {
       return converter.getAsString(facesContext, component, currentValue);
     } else {
       return currentValue.toString();
     }
   }
+
+  /**
+   * May return null, if no converter can be find.
+   */
+  protected Converter getConverter(
+      final FacesContext facesContext, final UIComponent component, final Object value) {
+
+    Converter converter = null;
+    if (component instanceof ValueHolder) {
+      converter = ((ValueHolder) component).getConverter();
+    }
+
+    if (converter == null) {
+      final ValueExpression valueExpression = component.getValueExpression("value");
+      if (valueExpression != null) {
+        Class converterType = null;
+        try {
+          converterType = valueExpression.getType(facesContext.getELContext());
+        } catch (final Exception e) {
+          // ignore, seems not to be possible, when EL is a function like #{bean.getName(item.id)}
+        }
+        if (converterType == null) {
+          if (value != null) {
+            converterType = value.getClass();
+          }
+        }
+        if (converterType != null && converterType != Object.class) {
+          converter = facesContext.getApplication().createConverter(converterType);
+        }
+      }
+    }
+
+    return converter;
+  }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
index 2159d94..e8b0972 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
@@ -845,32 +845,11 @@ public final class ComponentUtils {
   public static Converter getConverter(
       final FacesContext facesContext, final UIComponent component, final Object value) {
 
-    Converter converter = null;
-    if (component instanceof ValueHolder) {
-      converter = ((ValueHolder) component).getConverter();
-    }
-
-    if (converter == null) {
-      final ValueExpression valueExpression = component.getValueExpression("value");
-      if (valueExpression != null) {
-        Class converterType = null;
-        try {
-          converterType = valueExpression.getType(facesContext.getELContext());
-        } catch (final Exception e) {
-          // ignore, seems not to be possible, when EL is a function like #{bean.getName(item.id)}
-        }
-        if (converterType == null) {
-          if (value != null) {
-            converterType = value.getClass();
-          }
-        }
-        if (converterType != null && converterType != Object.class) {
-          converter = facesContext.getApplication().createConverter(converterType);
-        }
+    return new RendererBase<UIComponent>() {
+      public Converter fake(final FacesContext facesContext, final UIComponent component, final Object value) {
+        return getConverter(facesContext, component, value);
       }
-    }
-
-    return converter;
+    }.fake(facesContext, component, value);
   }
 
   /**