You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2022/11/16 15:59:27 UTC
[myfaces-tobago] branch t5_selectMany updated: feat(selectMany): refactor renderer
This is an automated email from the ASF dual-hosted git repository.
hnoeth pushed a commit to branch t5_selectMany
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git
The following commit(s) were added to refs/heads/t5_selectMany by this push:
new b006346673 feat(selectMany): refactor renderer
b006346673 is described below
commit b006346673f43580274dd435658662e3712828cd
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Wed Nov 16 16:59:18 2022 +0100
feat(selectMany): refactor renderer
Issue: TOBAGO-2159
---
.../renderkit/renderer/SelectManyRenderer.java | 133 ++++++++++-----------
1 file changed, 64 insertions(+), 69 deletions(-)
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java
index 1847908dd7..1bfb380596 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java
@@ -72,6 +72,7 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
final String clientId = component.getClientId(facesContext);
final String fieldId = component.getFieldId(facesContext);
final String filterId = clientId + ComponentUtils.SUB_SEPARATOR + "filter";
+ final String selectedId = clientId + ComponentUtils.SUB_SEPARATOR + "selected";
final List<SelectItem> items = SelectItemUtils.getItemList(facesContext, component);
final boolean disabled = !items.iterator().hasNext() || component.isDisabled() || component.isReadonly();
final String filter = component.getFilter();
@@ -79,75 +80,30 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
final Markup markup = component.getMarkup();
final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
- renderHiddenSelect(facesContext, component);
-
- writer.startElement(HtmlElements.DIV);
- writer.writeClassAttribute(
- inline ? BootstrapClass.LIST_GROUP : BootstrapClass.DROPDOWN,
- inline ? BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(component)) : null);
-
- renderSelectField(facesContext, component);
+ encodeHiddenSelect(facesContext, component, items, clientId, selectedId, disabled);
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(
- TobagoClass.OPTIONS,
- inline ? BootstrapClass.LIST_GROUP_ITEM : BootstrapClass.DROPDOWN_MENU);
- writer.writeNameAttribute(clientId);
-
- writer.startElement(HtmlElements.TABLE);
- writer.writeClassAttribute(BootstrapClass.TABLE, BootstrapClass.TABLE_HOVER, BootstrapClass.TABLE_SM);
- writer.startElement(HtmlElements.TBODY);
-
- final Object[] values = component.getSelectedValues();
- final String[] submittedValues = getSubmittedValues(component);
- for (SelectItem item : items) {
- 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 = getFormattedValue(facesContext, (T) component, itemValue);
- final boolean contains;
- if (submittedValues == null) {
- contains = ArrayUtils.contains(values, itemValue);
- } else {
- contains = ArrayUtils.contains(submittedValues, formattedValue);
- }
- writer.startElement(HtmlElements.TR);
- writer.writeAttribute(DataAttributes.VALUE, formattedValue, true);
- writer.writeClassAttribute(
- contains ? BootstrapClass.TABLE_PRIMARY : null,
- disabled || item.isDisabled() ? TobagoClass.DISABLED : null);
-
- writer.startElement(HtmlElements.TD);
- writer.writeAttribute(HtmlAttributes.VALUE, formattedValue, true);
- writer.writeText(item.getLabel());
- writer.endElement(HtmlElements.TD);
- writer.endElement(HtmlElements.TR);
- }
+ inline ? BootstrapClass.LIST_GROUP : BootstrapClass.DROPDOWN,
+ inline ? BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(component)) : null);
- writer.endElement(HtmlElements.TBODY);
- writer.endElement(HtmlElements.TABLE);
- writer.endElement(HtmlElements.DIV);
+ encodeSelectField(facesContext, component, clientId, fieldId, filterId, filter, disabled, inline, title);
+ encodeOptions(facesContext, component, items, clientId, inline, disabled);
writer.endElement(HtmlElements.DIV);
}
@Override
protected void writeAdditionalAttributes(FacesContext facesContext, TobagoResponseWriter writer, T input)
- throws IOException {
+ throws IOException {
super.writeAdditionalAttributes(facesContext, writer, input);
writer.writeAttribute(CustomAttributes.FILTER, input.getFilter(), true);
}
- private void renderHiddenSelect(FacesContext facesContext, T component) throws IOException {
+ private void encodeHiddenSelect(final FacesContext facesContext, final T component, final List<SelectItem> items,
+ final String clientId, final String selectedId, final boolean disabled) throws IOException {
final TobagoResponseWriter writer = getResponseWriter(facesContext);
- final String clientId = component.getClientId(facesContext);
- final String selectedId = clientId + ComponentUtils.SUB_SEPARATOR + "selected";
- final List<SelectItem> items = SelectItemUtils.getItemList(facesContext, component);
- final boolean disabled = !items.iterator().hasNext() || component.isDisabled() || component.isReadonly();
-
writer.startElement(HtmlElements.SELECT);
writer.writeIdAttribute(selectedId);
writer.writeNameAttribute(clientId);
@@ -162,29 +118,21 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
writer.endElement(HtmlElements.SELECT);
}
- private void renderSelectField(FacesContext facesContext, T component) throws IOException {
+ private void encodeSelectField(final FacesContext facesContext, final T component,
+ final String clientId, final String fieldId, final String filterId, final String filter, final boolean disabled,
+ final boolean inline, final String title) throws IOException {
final TobagoResponseWriter writer = getResponseWriter(facesContext);
- final String clientId = component.getClientId(facesContext);
- final String fieldId = component.getFieldId(facesContext);
- final String filterId = clientId + ComponentUtils.SUB_SEPARATOR + "filter";
- final List<SelectItem> items = SelectItemUtils.getItemList(facesContext, component);
- final boolean disabled = !items.iterator().hasNext() || component.isDisabled() || component.isReadonly();
- final String filter = component.getFilter();
- final boolean inline = component.isInline();
- final Markup markup = component.getMarkup();
- final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
-
writer.startElement(HtmlElements.DIV);
writer.writeIdAttribute(fieldId);
writer.writeNameAttribute(clientId);
HtmlRendererUtils.writeDataAttributes(facesContext, writer, component);
writer.writeClassAttribute(
- inline ? BootstrapClass.FORM_CONTROL : BootstrapClass.FORM_SELECT,
- TobagoClass.SELECT__FIELD,
- inline ? BootstrapClass.LIST_GROUP_ITEM : BootstrapClass.DROPDOWN_TOGGLE,
- inline ? null : BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(component)),
- component.getCustomClass());
+ inline ? BootstrapClass.FORM_CONTROL : BootstrapClass.FORM_SELECT,
+ TobagoClass.SELECT__FIELD,
+ inline ? BootstrapClass.LIST_GROUP_ITEM : BootstrapClass.DROPDOWN_TOGGLE,
+ inline ? null : BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(component)),
+ component.getCustomClass());
writer.writeAttribute(HtmlAttributes.TITLE, title, true);
writer.writeAttribute(Arias.EXPANDED, Boolean.FALSE.toString(), false);
writer.writeAttribute(HtmlAttributes.DISABLED, disabled);
@@ -202,6 +150,53 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
writer.endElement(HtmlElements.DIV);
}
+ private void encodeOptions(final FacesContext facesContext, final T component, final List<SelectItem> items,
+ final String clientId, final boolean inline, final boolean disabled) throws IOException {
+ final TobagoResponseWriter writer = getResponseWriter(facesContext);
+
+ writer.startElement(HtmlElements.DIV);
+ writer.writeClassAttribute(
+ TobagoClass.OPTIONS,
+ inline ? BootstrapClass.LIST_GROUP_ITEM : BootstrapClass.DROPDOWN_MENU);
+ writer.writeNameAttribute(clientId);
+
+ writer.startElement(HtmlElements.TABLE);
+ writer.writeClassAttribute(BootstrapClass.TABLE, BootstrapClass.TABLE_HOVER, BootstrapClass.TABLE_SM);
+ writer.startElement(HtmlElements.TBODY);
+
+ final Object[] values = component.getSelectedValues();
+ final String[] submittedValues = getSubmittedValues(component);
+ for (SelectItem item : items) {
+ 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 = getFormattedValue(facesContext, (T) component, itemValue);
+ final boolean contains;
+ if (submittedValues == null) {
+ contains = ArrayUtils.contains(values, itemValue);
+ } else {
+ contains = ArrayUtils.contains(submittedValues, formattedValue);
+ }
+ writer.startElement(HtmlElements.TR);
+ writer.writeAttribute(DataAttributes.VALUE, formattedValue, true);
+ writer.writeClassAttribute(
+ contains ? BootstrapClass.TABLE_PRIMARY : null,
+ disabled || item.isDisabled() ? TobagoClass.DISABLED : null);
+
+ writer.startElement(HtmlElements.TD);
+ writer.writeAttribute(HtmlAttributes.VALUE, formattedValue, true);
+ writer.writeText(item.getLabel());
+ writer.endElement(HtmlElements.TD);
+ writer.endElement(HtmlElements.TR);
+ }
+
+ writer.endElement(HtmlElements.TBODY);
+ writer.endElement(HtmlElements.TABLE);
+ writer.endElement(HtmlElements.DIV);
+ }
+
@Override
protected void encodeEndField(FacesContext facesContext, T component) throws IOException {
final TobagoResponseWriter writer = getResponseWriter(facesContext);