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:20 UTC
[myfaces-tobago] 03/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 72c311ddf4cd64a6ca3fa12e2a83a566f10f4755
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Mar 19 18:39:58 2021 +0100
chore: refactor ComponentUtils -> RendererBase
---
.../renderer/SelectManyCheckboxRenderer.java | 2 +-
.../renderkit/renderer/SelectOneRadioRenderer.java | 2 +-
.../tobago/internal/util/HtmlRendererUtils.java | 86 ++--------------------
.../myfaces/tobago/internal/util/RenderUtils.java | 21 +-----
.../myfaces/tobago/renderkit/RendererBase.java | 19 ++++-
.../apache/myfaces/tobago/util/ComponentUtils.java | 21 +++---
6 files changed, 40 insertions(+), 111 deletions(-)
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java
index c135bd3..6f031a8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxRenderer.java
@@ -84,7 +84,7 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
writer.startElement(HtmlElements.INPUT);
writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
- final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, item.getValue());
+ final String formattedValue = getFormattedValue(facesContext, component, item.getValue());
final boolean checked;
if (submittedValues == null) {
checked = ArrayUtils.contains(values, item.getValue());
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java
index 202838b..a657ed8 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java
@@ -84,7 +84,7 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
writer.startElement(HtmlElements.INPUT);
writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.RADIO);
- final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, item.getValue());
+ final String formattedValue = getFormattedValue(facesContext, component, item.getValue());
final boolean checked;
if (submittedValue == null) {
checked = ObjectUtils.equals(item.getValue(), value);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
index 97fe57c..fb3f082 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HtmlRendererUtils.java
@@ -20,11 +20,6 @@
package org.apache.myfaces.tobago.internal.util;
import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.RendererTypes;
-import org.apache.myfaces.tobago.component.Tags;
-import org.apache.myfaces.tobago.component.Visual;
-import org.apache.myfaces.tobago.context.Markup;
-import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
import org.apache.myfaces.tobago.renderkit.LabelWithAccessKey;
import org.apache.myfaces.tobago.renderkit.RendererBase;
import org.apache.myfaces.tobago.renderkit.css.FaIcons;
@@ -43,10 +38,8 @@ import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
-import javax.faces.model.SelectItemGroup;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
-import java.util.Arrays;
import java.util.Locale;
import java.util.Map;
@@ -142,79 +135,14 @@ public final class HtmlRendererUtils {
final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
final Boolean onlySelected, final TobagoResponseWriter writer, final FacesContext facesContext)
throws IOException {
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("component id = '{}'", component.getId());
- LOG.debug("values = '{}'", Arrays.toString(values));
- LOG.debug("submittedValues = '{}'", Arrays.toString(submittedValues));
- }
- for (final SelectItem item : items) {
- if (item instanceof SelectItemGroup) {
- writer.startElement(HtmlElements.OPTGROUP);
- writer.writeAttribute(HtmlAttributes.LABEL, item.getLabel(), true);
- if (item.isDisabled()) {
- writer.writeAttribute(HtmlAttributes.DISABLED, true);
- }
- final SelectItem[] selectItems = ((SelectItemGroup) item).getSelectItems();
- renderSelectItems(component, optionClass, Arrays.asList(selectItems), values, submittedValues,
- onlySelected, writer, facesContext);
- writer.endElement(HtmlElements.OPTGROUP);
- } else {
-
- Object itemValue = item.getValue();
- // when using selectItem tag with a literal value: use the converted value
- if (itemValue instanceof String && values != null && values.length > 0 && !(values[0] instanceof String)) {
- itemValue = ComponentUtils.getConvertedValue(facesContext, component, (String) itemValue);
- }
- final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, itemValue);
- final boolean contains;
- if (submittedValues == null) {
- contains = ArrayUtils.contains(values, itemValue);
- } else {
- contains = ArrayUtils.contains(submittedValues, formattedValue);
- }
- if (onlySelected != null) {
- if (onlySelected) {
- if (!contains) {
- continue;
- }
- } else {
- if (contains) {
- continue;
- }
- }
- }
- writer.startElement(HtmlElements.OPTION);
- writer.writeAttribute(HtmlAttributes.VALUE, formattedValue, true);
- if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
- final String image = ((org.apache.myfaces.tobago.model.SelectItem) item).getImage();
- if (image != null) {
- final AbstractUIStyle style = (AbstractUIStyle) facesContext.getApplication()
- .createComponent(facesContext, Tags.style.componentType(), RendererTypes.Style.name());
- style.setTransient(true);
- style.setBackgroundImage(image);
- style.setSelector(
- StyleRenderUtils.encodeIdSelector(component.getClientId(facesContext))
- + " option[value=" + formattedValue + "]");
- // XXX This works not in common browsers...
- component.getChildren().add(style);
- }
- }
- Markup markup = item instanceof Visual ? ((Visual) item).getMarkup() : Markup.NULL;
- if (onlySelected == null && contains) {
- writer.writeAttribute(HtmlAttributes.SELECTED, true);
- markup = Markup.SELECTED.add(markup);
- }
- if (item.isDisabled()) {
- writer.writeAttribute(HtmlAttributes.DISABLED, true);
- markup = Markup.DISABLED.add(markup);
- }
- writer.writeClassAttribute(optionClass, optionClass != null ? optionClass.createMarkup(markup) : null);
-
- writer.writeText(item.getLabel());
- writer.endElement(HtmlElements.OPTION);
+ new RendererBase<UIComponent>() {
+ public void fake(final UIInput component, final TobagoClass optionClass,
+ final Iterable<SelectItem> items, final Object[] values, final String[] submittedValues,
+ final Boolean onlySelected, final TobagoResponseWriter writer, final FacesContext facesContext)
+ throws IOException {
+ renderSelectItems(component, optionClass, items, values, submittedValues, onlySelected, writer, facesContext);
}
- }
+ }.fake(component, optionClass, items, values, submittedValues, onlySelected, writer, facesContext);
}
public static void writeDataAttributes(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
index 221b83b..261fc5a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/RenderUtils.java
@@ -38,11 +38,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.faces.application.ViewHandler;
-import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.component.UIParameter;
-import javax.faces.component.ValueHolder;
import javax.faces.component.behavior.AjaxBehavior;
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorBase;
@@ -142,22 +140,11 @@ public final class RenderUtils {
*/
@Deprecated
public static String currentValue(final UIComponent component) {
- String currentValue = null;
- if (component instanceof ValueHolder) {
- Object value;
- if (component instanceof EditableValueHolder) {
- value = ((EditableValueHolder) component).getSubmittedValue();
- if (value != null) {
- return (String) value;
- }
- }
-
- value = ((ValueHolder) component).getValue();
- if (value != null) {
- currentValue = ComponentUtils.getFormattedValue(FacesContext.getCurrentInstance(), component, value);
+ return new RendererBase<UIComponent>() {
+ public String fake(final UIComponent component) {
+ return getCurrentValue(FacesContext.getCurrentInstance(), component);
}
- }
- return currentValue;
+ }.fake(component);
}
public static void decodedStateOfTreeData(final FacesContext facesContext, final AbstractUIData data) {
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 df22260..2222a9a 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
@@ -154,7 +154,7 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
String currentValue = null;
final Object result = ((ValueHolder) component).getValue();
if (result != null) {
- currentValue = ComponentUtils.getFormattedValue(facesContext, component, result);
+ currentValue = getFormattedValue(facesContext, component, result);
}
return currentValue;
} else {
@@ -420,7 +420,7 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
if (itemValue instanceof String && values != null && values.length > 0 && !(values[0] instanceof String)) {
itemValue = ComponentUtils.getConvertedValue(facesContext, component, (String) itemValue);
}
- final String formattedValue = ComponentUtils.getFormattedValue(facesContext, component, itemValue);
+ final String formattedValue = getFormattedValue(facesContext, component, itemValue);
final boolean contains;
if (submittedValues == null) {
contains = ArrayUtils.contains(values, itemValue);
@@ -471,4 +471,19 @@ public abstract class RendererBase<T extends UIComponent> extends Renderer {
}
}
+ protected String getFormattedValue(
+ final FacesContext facesContext, final UIComponent component, final Object currentValue)
+ throws ConverterException {
+
+ if (currentValue == null) {
+ return "";
+ }
+
+ final Converter converter = ComponentUtils.getConverter(facesContext, component, currentValue);
+ if (converter != null) {
+ return converter.getAsString(facesContext, component, currentValue);
+ } else {
+ return currentValue.toString();
+ }
+ }
}
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 338265b..2159d94 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
@@ -873,20 +873,19 @@ public final class ComponentUtils {
return converter;
}
+ /**
+ * @deprecated since 5.0.0. Please use {@link RendererBase#getFormattedValue}
+ */
+ @Deprecated
public static String getFormattedValue(
final FacesContext facesContext, final UIComponent component, final Object currentValue)
throws ConverterException {
-
- if (currentValue == null) {
- return "";
- }
-
- final Converter converter = ComponentUtils.getConverter(facesContext, component, currentValue);
- if (converter != null) {
- return converter.getAsString(facesContext, component, currentValue);
- } else {
- return currentValue.toString();
- }
+ return new RendererBase<UIComponent>() {
+ public String fake(
+ final FacesContext facesContext, final UIComponent component, final Object currentValue) {
+ return getFormattedValue(facesContext, component, currentValue);
+ }
+ }.fake(facesContext, component, currentValue);
}
public static UIComponent createComponent(