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/07/02 21:52:11 UTC
[myfaces-tobago] 01/02: fix: id while rendering of
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 4e10c97ad61c22d0c1f7c26b168f7cb096ff12e2
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Jul 2 18:08:42 2021 +0200
fix: id while rendering of <tc:selectReference>
before, there was duplicate ids
---
.../renderer/LabelLayoutRendererBase.java | 12 ++++++-
.../internal/config/AbstractTobagoTestBase.java | 5 +++
.../renderer/SelectOneRadioRendererUnitTest.java | 33 +++++++++++++++++++
.../renderer/selectOneRadio/selectReference.html | 37 ++++++++++++++++++++++
4 files changed, 86 insertions(+), 1 deletion(-)
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
index 7992b8d..8896260 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
@@ -25,6 +25,8 @@ import org.apache.myfaces.tobago.component.SupportsAccessKey;
import org.apache.myfaces.tobago.component.SupportsAutoSpacing;
import org.apache.myfaces.tobago.component.SupportsLabelLayout;
import org.apache.myfaces.tobago.context.Markup;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectManyCheckbox;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectOneRadio;
import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
import org.apache.myfaces.tobago.internal.util.StringUtils;
@@ -167,7 +169,15 @@ public abstract class LabelLayoutRendererBase<T extends UIComponent & SupportsLa
// skip, because its only the lable to render
} else {
writer.startElement(getComponentTag());
- writer.writeIdAttribute(clientId);
+ if (component instanceof AbstractUISelectOneRadio // XXX a bit hacky
+ && ((AbstractUISelectOneRadio)component).getRenderRangeReference() != null) {
+ writer.writeIdAttribute(((AbstractUISelectOneRadio)component).getRenderRangeReference().getClientId());
+ } else if (component instanceof AbstractUISelectManyCheckbox // XXX a bit hacky
+ && ((AbstractUISelectManyCheckbox)component).getRenderRangeReference() != null) {
+ writer.writeIdAttribute(((AbstractUISelectManyCheckbox)component).getRenderRangeReference().getClientId());
+ } else {
+ writer.writeIdAttribute(clientId);
+ }
writer.writeClassAttribute(
flex ? TobagoClass.LABEL__CONTAINER : null,
getComponentCss(facesContext, component),
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
index 6a27f5e..cc67f04 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
@@ -48,6 +48,7 @@ import org.apache.myfaces.tobago.component.UISelectManyCheckbox;
import org.apache.myfaces.tobago.component.UISelectManyListbox;
import org.apache.myfaces.tobago.component.UISelectOneChoice;
import org.apache.myfaces.tobago.component.UISelectOneRadio;
+import org.apache.myfaces.tobago.component.UISelectReference;
import org.apache.myfaces.tobago.component.UISeparator;
import org.apache.myfaces.tobago.component.UIStyle;
import org.apache.myfaces.tobago.component.UITextarea;
@@ -80,6 +81,7 @@ import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectManyCheckboxR
import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectManyListboxRenderer;
import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectOneChoiceRenderer;
import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectOneRadioRenderer;
+import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectReferenceRenderer;
import org.apache.myfaces.tobago.internal.renderkit.renderer.SeparatorRenderer;
import org.apache.myfaces.tobago.internal.renderkit.renderer.StyleRenderer;
import org.apache.myfaces.tobago.internal.renderkit.renderer.TextareaRenderer;
@@ -167,6 +169,7 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
application.addComponent(Tags.selectManyListbox.componentType(), UISelectManyListbox.class.getName());
application.addComponent(Tags.selectOneRadio.componentType(), UISelectOneRadio.class.getName());
application.addComponent(Tags.selectOneChoice.componentType(), UISelectOneChoice.class.getName());
+ application.addComponent(Tags.selectReference.componentType(), UISelectReference.class.getName());
application.addComponent(Tags.separator.componentType(), UISeparator.class.getName());
application.addComponent(Tags.style.componentType(), UIStyle.class.getName());
application.addComponent(Tags.textarea.componentType(), UITextarea.class.getName());
@@ -212,6 +215,8 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
UISelectOneRadio.COMPONENT_FAMILY, RendererTypes.SELECT_ONE_RADIO, new SelectOneRadioRenderer());
renderKit.addRenderer(
UISelectOneChoice.COMPONENT_FAMILY, RendererTypes.SELECT_ONE_CHOICE, new SelectOneChoiceRenderer());
+ renderKit.addRenderer(
+ UISelectReference.COMPONENT_FAMILY, RendererTypes.SELECT_REFERENCE, new SelectReferenceRenderer());
renderKit.addRenderer(UISeparator.COMPONENT_FAMILY, RendererTypes.SEPARATOR, new SeparatorRenderer());
renderKit.addRenderer(UIStyle.COMPONENT_FAMILY, RendererTypes.STYLE, new StyleRenderer());
renderKit.addRenderer(UITextarea.COMPONENT_FAMILY, RendererTypes.TEXTAREA, new TextareaRenderer());
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRendererUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRendererUnitTest.java
index 8232110..3170f62 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRendererUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioRendererUnitTest.java
@@ -23,10 +23,12 @@ import org.apache.myfaces.tobago.component.RendererTypes;
import org.apache.myfaces.tobago.component.Tags;
import org.apache.myfaces.tobago.component.UISelectItem;
import org.apache.myfaces.tobago.component.UISelectOneRadio;
+import org.apache.myfaces.tobago.component.UISelectReference;
import org.apache.myfaces.tobago.util.ComponentUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import javax.faces.component.UIPanel;
import java.io.IOException;
public class SelectOneRadioRendererUnitTest extends RendererTestBase {
@@ -51,4 +53,35 @@ public class SelectOneRadioRendererUnitTest extends RendererTestBase {
Assertions.assertEquals(loadHtml("renderer/selectOneRadio/selectOneRadioLabel.html"), formattedResult());
}
+ @Test
+ public void reference() throws IOException {
+ final UIPanel panel = (UIPanel) ComponentUtils.createComponent(
+ facesContext, Tags.panel.componentType(), RendererTypes.Panel, "panel");
+
+ final UISelectOneRadio c = (UISelectOneRadio) ComponentUtils.createComponent(
+ facesContext, Tags.selectOneRadio.componentType(), RendererTypes.SelectOneRadio, "id");
+ c.setLabel("label");
+
+ final UISelectItem i1 = (UISelectItem) ComponentUtils.createComponent(
+ facesContext, Tags.selectItem.componentType(), null, "i1");
+ i1.setItemLabel("Stratocaster");
+ c.getChildren().add(i1);
+ final UISelectItem i2 = (UISelectItem) ComponentUtils.createComponent(
+ facesContext, Tags.selectItem.componentType(), null, "i2");
+ i2.setItemLabel("Telecaster");
+ c.getChildren().add(i2);
+ c.setRenderRange("0");
+ panel.getChildren().add(c);
+
+ final UISelectReference r = (UISelectReference) ComponentUtils.createComponent(
+ facesContext, Tags.selectReference.componentType(), RendererTypes.SelectReference, "ref");
+ r.setFor("id");
+ r.setRenderRange("1");
+ panel.getChildren().add(r);
+
+ panel.encodeAll(facesContext);
+
+ Assertions.assertEquals(loadHtml("renderer/selectOneRadio/selectReference.html"), formattedResult());
+ }
+
}
diff --git a/tobago-core/src/test/resources/renderer/selectOneRadio/selectReference.html b/tobago-core/src/test/resources/renderer/selectOneRadio/selectReference.html
new file mode 100644
index 0000000..a4af274
--- /dev/null
+++ b/tobago-core/src/test/resources/renderer/selectOneRadio/selectReference.html
@@ -0,0 +1,37 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+
+<tobago-panel id='panel'>
+ <tobago-select-one-radio id='id' class='tobago-label-container tobago-auto-spacing'>
+ <label class='col-form-label'>label</label>
+ <div>
+ <div class='form-check'>
+ <input class='form-check-input' type='radio' checked='checked' name='id' id='id::0' value=''>
+ <label class='form-check-label' for='id::0'>Stratocaster</label>
+ </div>
+ </div>
+ </tobago-select-one-radio>
+ <tobago-select-one-radio id='ref' class='tobago-label-container tobago-auto-spacing'>
+ <label class='col-form-label'>label</label>
+ <div>
+ <div class='form-check'>
+ <input class='form-check-input' type='radio' checked='checked' name='id' id='id::1' value=''>
+ <label class='form-check-label' for='id::1'>Telecaster</label>
+ </div>
+ </div>
+ </tobago-select-one-radio>
+</tobago-panel>
\ No newline at end of file