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);
}
/**