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 2026/09/23 13:19:34 UTC

(myfaces-tobago) branch main updated: fix(selectManyCheckbox/selectOneRadio): missing IDs

This is an automated email from the ASF dual-hosted git repository.

henningn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/main by this push:
     new 948b8828f7 fix(selectManyCheckbox/selectOneRadio): missing IDs
948b8828f7 is described below

commit 948b8828f7c485a97268c8a7b76654808beb984f
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Mon Sep 21 19:40:58 2026 +0200

    fix(selectManyCheckbox/selectOneRadio): missing IDs
    
    ID is missing for tc:selectManyCheckbox and tc:selectOneRadio if inside a dropdown menu.
    * add test
    * fix: add IDs
    
    Issue: TOBAGO-2546
---
 .../internal/renderkit/renderer/SelectManyCheckboxRenderer.java       | 4 ++++
 .../tobago/internal/renderkit/renderer/SelectOneRadioRenderer.java    | 4 ++++
 tobago-core/src/test/resources/renderer/link/manyInsideLink.html      | 2 +-
 tobago-core/src/test/resources/renderer/link/radioInsideLink.html     | 2 +-
 4 files changed, 10 insertions(+), 2 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 ced5b9ba0c..451b8b76c9 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
@@ -21,6 +21,7 @@
 
 import jakarta.faces.context.FacesContext;
 import jakarta.faces.model.SelectItem;
+
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUISelectManyCheckbox;
 import org.apache.myfaces.tobago.internal.component.AbstractUISelectReference;
@@ -60,6 +61,9 @@ public void encodeBeginField(final FacesContext facesContext, final T component)
     final boolean isInsideCommand = isInside(facesContext, HtmlElements.COMMAND);
 
     writer.startElement(getTag(facesContext));
+    if (isInsideCommand) {
+      writer.writeIdAttribute(id);
+    }
     writer.writeClassAttribute(
         inline ? BootstrapClass.FORM_CHECK_INLINE : null,
         component.getCustomClass());
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 d70e2963d4..9cfdcc6bcf 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
@@ -21,6 +21,7 @@
 
 import jakarta.faces.context.FacesContext;
 import jakarta.faces.model.SelectItem;
+
 import org.apache.myfaces.tobago.component.Attributes;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIFormBase;
@@ -112,6 +113,9 @@ protected void encodeBeginField(final FacesContext facesContext, final T compone
     final String name = getDecodingId(facesContext, component);
 
     writer.startElement(getTag(facesContext));
+    if (isInsideCommand) {
+      writer.writeIdAttribute(id);
+    }
     writer.writeClassAttribute(
         inline ? BootstrapClass.FORM_CHECK_INLINE : null,
         component.getCustomClass());
diff --git a/tobago-core/src/test/resources/renderer/link/manyInsideLink.html b/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
index 914a851c0e..e86bf546cb 100644
--- a/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
+++ b/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
@@ -18,7 +18,7 @@
 <tobago-dropdown id='id' class='dropdown'>
 <button type='button' id='id::command' name='id' aria-expanded='false' class='tobago-link btn btn-link tobago-auto-spacing dropdown-toggle'><tobago-behavior event='click' client-id='id' field-id='id::command'></tobago-behavior><span>dropdown</span></button>
 <div class='tobago-dropdown-menu' aria-labelledby='id::command' name='id' data-tobago-for='id'>
-<tobago-select-many-checkbox>
+<tobago-select-many-checkbox id='many'>
 <div class='form-check dropdown-item'>
 <input class='form-check-input' type='checkbox' name='many' id='many::0' value=''>
 <label class='form-check-label' for='many::0'>Stratocaster</label></div>
diff --git a/tobago-core/src/test/resources/renderer/link/radioInsideLink.html b/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
index c3935aefa3..f178c00400 100644
--- a/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
+++ b/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
@@ -18,7 +18,7 @@
 <tobago-dropdown id='id' class='dropdown'>
 <button type='button' id='id::command' name='id' aria-expanded='false' class='tobago-link btn btn-link tobago-auto-spacing dropdown-toggle'><tobago-behavior event='click' client-id='id' field-id='id::command'></tobago-behavior><span>dropdown</span></button>
 <div class='tobago-dropdown-menu' aria-labelledby='id::command' name='id' data-tobago-for='id'>
-<tobago-select-one-radio>
+<tobago-select-one-radio id='radio'>
 <div class='form-check dropdown-item'>
 <input class='form-check-input' type='radio' checked='checked' name='radio' id='radio::0' value=''>
 <label class='form-check-label' for='radio::0'>Stratocaster</label></div>