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