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 2020/10/28 11:07:42 UTC

[myfaces-tobago] branch master updated (75eb578 -> a302732)

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

lofwyr pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git.


    from 75eb578  TOBAGO-1633: Use TypeScript instead of JavaScript. new tags tobago-box and tobago-section
     new ebf8898  TOBAGO-1633: Use TypeScript instead of JavaScript. Simplify Renderers: remove "inside": selectBooleanCheckboxInsideCommand, SelectOneRadioInsideCommand, selectManyCheckboxInsideCommand
     new de299e2  TOBAGO-1633: Use TypeScript instead of JavaScript. Simplify Renderers: remove "inside": selectBooleanCheckboxInsideCommand, SelectOneRadioInsideCommand, selectManyCheckboxInsideCommand Move CSS class dropdown-item one element up
     new a302732  update demo vm

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../myfaces/tobago/component/RendererTypes.java    |   8 --
 .../renderkit/renderer/CommandRendererBase.java    |  34 +++----
 .../renderer/LinkInsideCommandRenderer.java        |  34 -------
 .../renderer/MessageLayoutRendererBase.java        |  18 ++++
 ...SelectBooleanCheckboxInsideCommandRenderer.java |  60 ------------
 .../renderer/SelectBooleanCheckboxRenderer.java    |  28 +++---
 .../SelectManyCheckboxInsideCommandRenderer.java   |  52 -----------
 .../renderer/SelectManyCheckboxRenderer.java       |  26 +++---
 .../SelectOneRadioInsideCommandRenderer.java       |  51 -----------
 .../renderkit/renderer/SelectOneRadioRenderer.java |  26 +++---
 .../taglib/component/BadgeTagDeclaration.java      |   2 +-
 .../taglib/component/ButtonTagDeclaration.java     |   2 +-
 .../taglib/component/LinkTagDeclaration.java       |   2 +-
 .../taglib/component/LinksTagDeclaration.java      |   2 +-
 .../taglib/component/OutTagDeclaration.java        |   2 +-
 .../SelectBooleanCheckboxTagDeclaration.java       |   2 +-
 .../SelectBooleanToggleTagDeclaration.java         |   2 +-
 .../SelectManyCheckboxTagDeclaration.java          |   2 +-
 .../component/SelectOneChoiceTagDeclaration.java   |   2 +-
 .../component/SelectOneRadioTagDeclaration.java    |   2 +-
 .../taglib/component/SeparatorTagDeclaration.java  |   2 +-
 .../tobago/renderkit/html/HtmlElements.java        |   2 +
 .../internal/config/AbstractTobagoTestBase.java    |  17 +++-
 .../renderkit/renderer/LinkRendererUnitTest.java   | 102 +++++++++++++++++++++
 .../booleanInsideLink.html}                        |  16 ++--
 .../manyInsideLink.html}                           |  22 +++--
 .../resources/renderer/link/radioInsideLink.html   |  34 +++++++
 .../separatorInsideLink.html}                      |  20 ++--
 .../main/tobago-vm/docker/apache-proxy/index.html  |   4 +-
 .../src/main/tobago-vm/docker/docker-compose.yml   |   6 +-
 30 files changed, 282 insertions(+), 300 deletions(-)
 delete mode 100644 tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkInsideCommandRenderer.java
 delete mode 100644 tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java
 delete mode 100644 tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxInsideCommandRenderer.java
 delete mode 100644 tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioInsideCommandRenderer.java
 copy tobago-core/src/test/resources/renderer/{buttons/badge-inside-buttons.html => link/booleanInsideLink.html} (58%)
 copy tobago-core/src/test/resources/renderer/{buttons/badge-inside-buttons.html => link/manyInsideLink.html} (50%)
 create mode 100644 tobago-core/src/test/resources/renderer/link/radioInsideLink.html
 copy tobago-core/src/test/resources/renderer/{buttons/badge-inside-buttons.html => link/separatorInsideLink.html} (51%)


[myfaces-tobago] 02/03: TOBAGO-1633: Use TypeScript instead of JavaScript. Simplify Renderers: remove "inside": selectBooleanCheckboxInsideCommand, SelectOneRadioInsideCommand, selectManyCheckboxInsideCommand Move CSS class dropdown-item one element up

Posted by lo...@apache.org.
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 de299e22577465afb57f65d9803076bc852de0dd
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Wed Oct 28 11:58:35 2020 +0100

    TOBAGO-1633: Use TypeScript instead of JavaScript.
    Simplify Renderers: remove "inside": selectBooleanCheckboxInsideCommand, SelectOneRadioInsideCommand, selectManyCheckboxInsideCommand
    Move CSS class dropdown-item one element up
---
 .../renderer/SelectBooleanCheckboxRenderer.java        | 18 +++++-------------
 .../renderkit/renderer/SelectManyCheckboxRenderer.java |  7 +++----
 .../renderkit/renderer/SelectOneRadioRenderer.java     |  7 +++----
 .../resources/renderer/link/booleanInsideLink.html     |  4 ++--
 .../test/resources/renderer/link/manyInsideLink.html   |  8 ++++----
 .../test/resources/renderer/link/radioInsideLink.html  |  8 ++++----
 6 files changed, 21 insertions(+), 31 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
index 0bdb3c3..d25253c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
@@ -116,9 +116,7 @@ public class SelectBooleanCheckboxRenderer<T extends AbstractUISelectBooleanChec
     writer.endElement(HtmlElements.INPUT);
 
     writer.startElement(HtmlElements.LABEL);
-    writer.writeClassAttribute(
-        BootstrapClass.FORM_CHECK_LABEL,
-        getCssItems(facesContext, component));
+    writer.writeClassAttribute(BootstrapClass.FORM_CHECK_LABEL);
     if (!disabled && label.getAccessKey() != null) {
       writer.writeAttribute(HtmlAttributes.ACCESSKEY, Character.toString(label.getAccessKey()), false);
       AccessKeyLogger.addAccessKey(facesContext, label.getAccessKey(), clientId);
@@ -163,21 +161,15 @@ public class SelectBooleanCheckboxRenderer<T extends AbstractUISelectBooleanChec
   }
 
   protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
-    final boolean colFromLabel = !select.isLabelLayoutSkip() && !isInside(facesContext, HtmlElements.COMMAND);
+    final boolean insideCommand = isInside(facesContext, HtmlElements.COMMAND);
+    final boolean colFromLabel = !select.isLabelLayoutSkip() && !insideCommand;
     return new CssItem[]{
         BootstrapClass.FORM_CHECK,
-        colFromLabel ? BootstrapClass.COL_FORM_LABEL : null
+        colFromLabel ? BootstrapClass.COL_FORM_LABEL : null,
+        insideCommand ? BootstrapClass.DROPDOWN_ITEM : null,
     };
   }
 
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
-    if (isInside(facesContext, HtmlElements.COMMAND)) {
-      return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
-    } else {
-      return null;
-    }
-  }
-
   @Override
   protected String getFieldId(final FacesContext facesContext, final T component) {
     return component.getFieldId(facesContext);
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 763bd94..7ccd77c 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
@@ -82,7 +82,8 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
         writer.startElement(HtmlElements.DIV);
         writer.writeClassAttribute(
             BootstrapClass.FORM_CHECK,
-            inline ? BootstrapClass.FORM_CHECK_INLINE : null);
+            inline ? BootstrapClass.FORM_CHECK_INLINE : null,
+            isInsideCommand ? BootstrapClass.DROPDOWN_ITEM : null);
         writer.startElement(HtmlElements.INPUT);
         writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
         writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
@@ -108,9 +109,7 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
         writer.endElement(HtmlElements.INPUT);
 
         writer.startElement(HtmlElements.LABEL);
-        writer.writeClassAttribute(
-            BootstrapClass.FORM_CHECK_LABEL,
-            isInsideCommand ? BootstrapClass.DROPDOWN_ITEM : null);
+        writer.writeClassAttribute(BootstrapClass.FORM_CHECK_LABEL);
         writer.writeAttribute(HtmlAttributes.FOR, itemId, false);
 
         if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
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 cba6407..bf759f5d 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
@@ -82,7 +82,8 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
         writer.startElement(HtmlElements.DIV);
         writer.writeClassAttribute(
             BootstrapClass.FORM_CHECK,
-            inline ? BootstrapClass.FORM_CHECK_INLINE : null);
+            inline ? BootstrapClass.FORM_CHECK_INLINE : null,
+            isInsideCommand ? BootstrapClass.DROPDOWN_ITEM : null);
         writer.startElement(HtmlElements.INPUT);
         writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
         writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.RADIO);
@@ -108,9 +109,7 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
         writer.endElement(HtmlElements.INPUT);
 
         writer.startElement(HtmlElements.LABEL);
-        writer.writeClassAttribute(
-            BootstrapClass.FORM_CHECK_LABEL,
-            isInsideCommand ? BootstrapClass.DROPDOWN_ITEM : null);
+        writer.writeClassAttribute(BootstrapClass.FORM_CHECK_LABEL);
         writer.writeAttribute(HtmlAttributes.FOR, itemId, false);
         if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
           final org.apache.myfaces.tobago.model.SelectItem tobagoItem =
diff --git a/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html b/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html
index 64b0466..1e5d1ff 100644
--- a/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html
+++ b/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html
@@ -20,9 +20,9 @@
     <tobago-behavior event='click' decoupled='decoupled'>
     </tobago-behavior><span>dropdown</span></button>
   <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
-    <tobago-select-boolean-checkbox id='id' class='tobago-selectBooleanCheckbox form-check'>
+    <tobago-select-boolean-checkbox id='id' class='tobago-selectBooleanCheckbox form-check dropdown-item'>
       <input class='form-check-input' type='checkbox' value='true' name='id' id='id::field'>
-      <label class='form-check-label dropdown-item' for='id::field'></label>
+      <label class='form-check-label' for='id::field'></label>
     </tobago-select-boolean-checkbox>
   </div>
 </tobago-dropdown>
\ No newline at end of file
diff --git a/tobago-core/src/test/resources/renderer/link/manyInsideLink.html b/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
index b15a572..8dd548c 100644
--- a/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
+++ b/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
@@ -21,13 +21,13 @@
     </tobago-behavior><span>dropdown</span></button>
   <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
     <tobago-select-many-checkbox class='tobago-selectManyCheckbox'>
-      <div class='form-check'>
+      <div class='form-check dropdown-item'>
         <input class='form-check-input' type='checkbox' name='many' id='many::0' value=''>
-        <label class='form-check-label dropdown-item' for='many::0'>Stratocaster</label>
+        <label class='form-check-label' for='many::0'>Stratocaster</label>
       </div>
-      <div class='form-check'>
+      <div class='form-check dropdown-item'>
         <input class='form-check-input' type='checkbox' name='many' id='many::1' value=''>
-        <label class='form-check-label dropdown-item' for='many::1'>Telecaster</label>
+        <label class='form-check-label' for='many::1'>Telecaster</label>
       </div>
     </tobago-select-many-checkbox>
   </div>
diff --git a/tobago-core/src/test/resources/renderer/link/radioInsideLink.html b/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
index bbb9ed7..4808faf 100644
--- a/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
+++ b/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
@@ -21,13 +21,13 @@
     </tobago-behavior><span>dropdown</span></button>
   <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
     <tobago-select-one-radio class='tobago-selectOneRadio'>
-      <div class='form-check'>
+      <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 dropdown-item' for='radio::0'>Stratocaster</label>
+        <label class='form-check-label' for='radio::0'>Stratocaster</label>
       </div>
-      <div class='form-check'>
+      <div class='form-check dropdown-item'>
         <input class='form-check-input' type='radio' checked='checked' name='radio' id='radio::1' value=''>
-        <label class='form-check-label dropdown-item' for='radio::1'>Telecaster</label>
+        <label class='form-check-label' for='radio::1'>Telecaster</label>
       </div>
     </tobago-select-one-radio>
   </div>


[myfaces-tobago] 03/03: update demo vm

Posted by lo...@apache.org.
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 a3027324893de097a81becb0f9fd4c0e69def901
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Wed Oct 28 12:07:18 2020 +0100

    update demo vm
---
 .../src/main/tobago-vm/docker/apache-proxy/index.html               | 4 ++--
 .../src/main/tobago-vm/docker/docker-compose.yml                    | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/apache-proxy/index.html b/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/apache-proxy/index.html
index 4c98b3a..b99077b 100644
--- a/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/apache-proxy/index.html
+++ b/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/apache-proxy/index.html
@@ -35,8 +35,8 @@
         {
           major: "4",
           release: "4.5.0",
-          staging: "",
-          snapshot: "4.5.1-SNAPSHOT",
+          staging: "4.5.1",
+          snapshot: "4.5.2-SNAPSHOT",
           link: "4",
           archived: false
         },
diff --git a/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/docker-compose.yml b/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/docker-compose.yml
index 6167978..72671c7 100644
--- a/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/docker-compose.yml
+++ b/tobago-example/tobago-example-demo/src/main/tobago-vm/docker/docker-compose.yml
@@ -102,8 +102,8 @@ services:
   demo-4-staging:
     build: tomcat
     environment:
-      - TOBAGO_VERSION=4.5.0
-      - STAGING_NUMBER=1160
+      - TOBAGO_VERSION=4.5.1
+      - STAGING_NUMBER=1171
       - CONTEXT_PATH=demo-4-staging
     volumes:
       - /opt/docker/artifacts:/opt/docker/artifacts
@@ -116,7 +116,7 @@ services:
   demo-4-snapshot:
     build: tomcat
     environment:
-      - TOBAGO_VERSION=4.5.1-SNAPSHOT
+      - TOBAGO_VERSION=4.5.2-SNAPSHOT
       - CONTEXT_PATH=demo-4-snapshot
     volumes:
       - /opt/docker/artifacts:/opt/docker/artifacts


[myfaces-tobago] 01/03: TOBAGO-1633: Use TypeScript instead of JavaScript. Simplify Renderers: remove "inside": selectBooleanCheckboxInsideCommand, SelectOneRadioInsideCommand, selectManyCheckboxInsideCommand

Posted by lo...@apache.org.
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 ebf8898fc9f1e28852eb3fa352daf4d557db6d39
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Wed Oct 28 11:36:35 2020 +0100

    TOBAGO-1633: Use TypeScript instead of JavaScript.
    Simplify Renderers: remove "inside": selectBooleanCheckboxInsideCommand, SelectOneRadioInsideCommand, selectManyCheckboxInsideCommand
---
 .../myfaces/tobago/component/RendererTypes.java    |   8 --
 .../renderkit/renderer/CommandRendererBase.java    |  34 +++----
 .../renderer/LinkInsideCommandRenderer.java        |  34 -------
 .../renderer/MessageLayoutRendererBase.java        |  18 ++++
 ...SelectBooleanCheckboxInsideCommandRenderer.java |  60 ------------
 .../renderer/SelectBooleanCheckboxRenderer.java    |  24 +++--
 .../SelectManyCheckboxInsideCommandRenderer.java   |  52 -----------
 .../renderer/SelectManyCheckboxRenderer.java       |  21 +++--
 .../SelectOneRadioInsideCommandRenderer.java       |  51 -----------
 .../renderkit/renderer/SelectOneRadioRenderer.java |  21 +++--
 .../taglib/component/BadgeTagDeclaration.java      |   2 +-
 .../taglib/component/ButtonTagDeclaration.java     |   2 +-
 .../taglib/component/LinkTagDeclaration.java       |   2 +-
 .../taglib/component/LinksTagDeclaration.java      |   2 +-
 .../taglib/component/OutTagDeclaration.java        |   2 +-
 .../SelectBooleanCheckboxTagDeclaration.java       |   2 +-
 .../SelectBooleanToggleTagDeclaration.java         |   2 +-
 .../SelectManyCheckboxTagDeclaration.java          |   2 +-
 .../component/SelectOneChoiceTagDeclaration.java   |   2 +-
 .../component/SelectOneRadioTagDeclaration.java    |   2 +-
 .../taglib/component/SeparatorTagDeclaration.java  |   2 +-
 .../tobago/renderkit/html/HtmlElements.java        |   2 +
 .../internal/config/AbstractTobagoTestBase.java    |  17 +++-
 .../renderkit/renderer/LinkRendererUnitTest.java   | 102 +++++++++++++++++++++
 .../resources/renderer/link/booleanInsideLink.html |  28 ++++++
 .../resources/renderer/link/manyInsideLink.html    |  34 +++++++
 .../resources/renderer/link/radioInsideLink.html   |  34 +++++++
 .../renderer/link/separatorInsideLink.html         |  32 +++++++
 28 files changed, 329 insertions(+), 265 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java
index 720581c..97a4a2a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java
@@ -46,7 +46,6 @@ public enum RendererTypes {
   In,
   Image,
   Link,
-  LinkInsideCommand,
   Links,
   Label,
   Messages,
@@ -65,15 +64,12 @@ public enum RendererTypes {
   Section,
   SegmentLayout,
   SelectBooleanCheckbox,
-  SelectBooleanCheckboxInsideCommand,
   SelectBooleanToggle,
   SelectManyCheckbox,
-  SelectManyCheckboxInsideCommand,
   SelectManyListbox,
   SelectManyShuttle,
   SelectOneChoice,
   SelectOneRadio,
-  SelectOneRadioInsideCommand,
   SelectOneListbox,
   SelectReference,
   Separator,
@@ -121,7 +117,6 @@ public enum RendererTypes {
   public static final String IN = "In";
   public static final String IMAGE = "Image";
   public static final String LINK = "Link";
-  public static final String LINK_INSIDE_COMMAND = "LinkInsideCommand";
   public static final String LINKS = "Links";
   public static final String LABEL = "Label";
   public static final String MESSAGES = "Messages";
@@ -140,15 +135,12 @@ public enum RendererTypes {
   public static final String SECTION = "Section";
   public static final String SEGMENT_LAYOUT = "SegmentLayout";
   public static final String SELECT_BOOLEAN_CHECKBOX = "SelectBooleanCheckbox";
-  public static final String SELECT_BOOLEAN_CHECKBOX_INSIDE_COMMAND = "SelectBooleanCheckboxInsideCommand";
   public static final String SELECT_BOOLEAN_TOGGLE = "SelectBooleanToggle";
   public static final String SELECT_MANY_CHECKBOX = "SelectManyCheckbox";
-  public static final String SELECT_MANY_CHECKBOX_INSIDE_COMMAND = "SelectManyCheckboxInsideCommand";
   public static final String SELECT_MANY_LISTBOX = "SelectManyListbox";
   public static final String SELECT_MANY_SHUTTLE = "SelectManyShuttle";
   public static final String SELECT_ONE_CHOICE = "SelectOneChoice";
   public static final String SELECT_ONE_RADIO = "SelectOneRadio";
-  public static final String SELECT_ONE_RADIO_INSIDE_COMMAND = "SelectOneRadioInsideCommand";
   public static final String SELECT_ONE_LISTBOX = "SelectOneListbox";
   public static final String SELECT_REFERENCE = "SelectReference";
   public static final String SEPARATOR = "Separator";
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/CommandRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/CommandRendererBase.java
index fca31b3..a3171bb 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/CommandRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/CommandRendererBase.java
@@ -20,7 +20,6 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.RendererTypes;
 import org.apache.myfaces.tobago.internal.component.AbstractUIBadge;
 import org.apache.myfaces.tobago.internal.component.AbstractUICommand;
 import org.apache.myfaces.tobago.internal.component.AbstractUIFormBase;
@@ -68,7 +67,7 @@ public abstract class CommandRendererBase<T extends AbstractUICommand> extends D
     final boolean anchor = (component.getLink() != null || component.getOutcome() != null) && !disabled;
     final String target = component.getTarget();
     final boolean parentOfCommands = component.isParentOfCommands();
-    final boolean dropdownSubmenu = this instanceof LinkInsideCommandRenderer;
+    final boolean dropdownSubmenu = isInside(facesContext, HtmlElements.COMMAND);
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
@@ -110,15 +109,13 @@ public abstract class CommandRendererBase<T extends AbstractUICommand> extends D
       writer.writeAttribute(DataAttributes.TOGGLE, "dropdown", false);
     }
     final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
-    if (title != null) {
-      writer.writeAttribute(HtmlAttributes.TITLE, title, true);
-    }
+    writer.writeAttribute(HtmlAttributes.TITLE, title, true);
 
     writer.writeClassAttribute(
         getRendererCssClass(),
         getRendererCssClass().createMarkup(component.getMarkup()),
-        parentOfCommands ? null : getOuterCssItems(facesContext, component),
         getCssItems(facesContext, component),
+        !parentOfCommands && dropdownSubmenu ? BootstrapClass.DROPDOWN_ITEM : null,
         parentOfCommands && !dropdownSubmenu ? BootstrapClass.DROPDOWN_TOGGLE : null,
         component.getCustomClass(),
         isInside(facesContext, HtmlElements.TOBAGO_LINKS) ? BootstrapClass.NAV_LINK : null);
@@ -184,17 +181,21 @@ public abstract class CommandRendererBase<T extends AbstractUICommand> extends D
             }
             renderLater.add(child);
           } else if (child instanceof AbstractUILink) {
-            child.setRendererType(RendererTypes.LinkInsideCommand.name());
+            insideBegin(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
             child.encodeAll(facesContext);
+            insideEnd(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
           } else if (child instanceof AbstractUISelectBooleanCheckbox) {
-            child.setRendererType(RendererTypes.SelectBooleanCheckboxInsideCommand.name());
+            insideBegin(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
             child.encodeAll(facesContext);
+            insideEnd(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
           } else if (child instanceof AbstractUISelectManyCheckbox) {
-            child.setRendererType(RendererTypes.SelectManyCheckboxInsideCommand.name());
+            insideBegin(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
             child.encodeAll(facesContext);
+            insideEnd(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
           } else if (child instanceof AbstractUISelectOneRadio) {
-            child.setRendererType(RendererTypes.SelectOneRadioInsideCommand.name());
+            insideBegin(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
             child.encodeAll(facesContext);
+            insideEnd(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
           } else if (child instanceof AbstractUISeparator) {
             insideBegin(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
             child.encodeAll(facesContext);
@@ -232,23 +233,16 @@ public abstract class CommandRendererBase<T extends AbstractUICommand> extends D
 
     final String clientId = command.getClientId(facesContext);
     final boolean parentOfCommands = command.isParentOfCommands();
-    final boolean dropdownSubmenu = this instanceof LinkInsideCommandRenderer;
-
+    final boolean dropdownSubmenu = isInside(facesContext, HtmlElements.COMMAND);
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     if (parentOfCommands) {
       writer.startElement(HtmlElements.TOBAGO_DROPDOWN);
       writer.writeIdAttribute(clientId);
 
-      final CssItem first;
-      if (dropdownSubmenu) {
-        first = TobagoClass.DROPDOWN__SUBMENU;
-      } else {
-        first = BootstrapClass.DROPDOWN;
-      }
       writer.writeClassAttribute(
-          first,
-          getOuterCssItems(facesContext, command));
+          dropdownSubmenu ? TobagoClass.DROPDOWN__SUBMENU : BootstrapClass.DROPDOWN,
+          dropdownSubmenu ? BootstrapClass.DROPDOWN_ITEM : null);
     }
   }
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkInsideCommandRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkInsideCommandRenderer.java
deleted file mode 100644
index fee9493..0000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkInsideCommandRenderer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.myfaces.tobago.internal.renderkit.renderer;
-
-import org.apache.myfaces.tobago.internal.component.AbstractUILink;
-import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.CssItem;
-
-import javax.faces.context.FacesContext;
-
-public class LinkInsideCommandRenderer<T extends AbstractUILink> extends LinkRenderer<T> {
-
-  @Override
-  protected CssItem[] getOuterCssItems(final FacesContext facesContext, final T command) {
-    return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
-  }
-}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java
index 29b6ee5..70c96ab 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java
@@ -43,6 +43,24 @@ public abstract class MessageLayoutRendererBase<T extends UIComponent & Supports
     extends LabelLayoutRendererBase<T> {
 
   @Override
+  public void encodeBeginInternal(FacesContext facesContext, T component) throws IOException {
+    if (isInside(facesContext, HtmlElements.COMMAND)) {
+      encodeBeginField(facesContext, component);
+    } else {
+      super.encodeBeginInternal(facesContext, component);
+    }
+  }
+
+  @Override
+  public void encodeEndInternal(FacesContext facesContext, T component) throws IOException {
+    if (isInside(facesContext, HtmlElements.COMMAND)) {
+      encodeEndField(facesContext, component);
+    } else {
+      super.encodeEndInternal(facesContext, component);
+    }
+  }
+
+  @Override
   public void encodeBeginMessageField(final FacesContext facesContext, final T component) throws IOException {
     encodeBeginMessagesContainer(facesContext, component);
     encodeBeginField(facesContext, component);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java
deleted file mode 100644
index 657a39c..0000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.myfaces.tobago.internal.renderkit.renderer;
-
-import org.apache.myfaces.tobago.internal.component.AbstractUISelectBoolean;
-import org.apache.myfaces.tobago.internal.component.AbstractUISelectBooleanCheckbox;
-import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.CssItem;
-import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
-
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-public class SelectBooleanCheckboxInsideCommandRenderer<T extends AbstractUISelectBooleanCheckbox>
-    extends SelectBooleanCheckboxRenderer<T> {
-
-  @Override
-  public void encodeBeginInternal(final FacesContext facesContext, final T component) throws IOException {
-    encodeBeginField(facesContext, component);
-  }
-
-  @Override
-  public void encodeEndInternal(final FacesContext facesContext, final T component) throws IOException {
-    encodeEndField(facesContext, component);
-  }
-
-  @Override
-  protected HtmlElements getOuterHtmlTag() {
-    return HtmlElements.TOBAGO_SELECT_BOOLEAN_CHECKBOX;
-  }
-
-  @Override
-  protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
-    return new CssItem[]{
-        BootstrapClass.FORM_CHECK
-    };
-  }
-
-  @Override
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
-    return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
-  }
-}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
index d8efa09..0bdb3c3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
@@ -88,7 +88,7 @@ public class SelectBooleanCheckboxRenderer<T extends AbstractUISelectBooleanChec
     final String itemImage = component.getItemImage();
     final Markup markup = component.getMarkup();
 
-    writer.startElement(getOuterHtmlTag());
+    writer.startElement(getOuterHtmlTag(facesContext));
     writer.writeIdAttribute(clientId);
     writer.writeClassAttribute(
         getTobagoClass(),
@@ -148,24 +148,34 @@ public class SelectBooleanCheckboxRenderer<T extends AbstractUISelectBooleanChec
   protected void encodeEndField(final FacesContext facesContext, final T component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
-    writer.endElement(getOuterHtmlTag());
+    writer.endElement(getOuterHtmlTag(facesContext));
 
     encodeBehavior(writer, facesContext, component);
   }
 
-  protected HtmlElements getOuterHtmlTag() {
-    return HtmlElements.DIV;
+  /** XXX can this be removed? use always HtmlElements.TOBAGO_SELECT_BOOLEAN_CHECKBOX ??? */
+  protected HtmlElements getOuterHtmlTag(final FacesContext facesContext) {
+    if (isInside(facesContext, HtmlElements.COMMAND)) {
+      return HtmlElements.TOBAGO_SELECT_BOOLEAN_CHECKBOX;
+    } else {
+      return HtmlElements.DIV;
+    }
   }
 
   protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
+    final boolean colFromLabel = !select.isLabelLayoutSkip() && !isInside(facesContext, HtmlElements.COMMAND);
     return new CssItem[]{
-        !select.isLabelLayoutSkip() ? BootstrapClass.COL_FORM_LABEL : null,
-        BootstrapClass.FORM_CHECK
+        BootstrapClass.FORM_CHECK,
+        colFromLabel ? BootstrapClass.COL_FORM_LABEL : null
     };
   }
 
   protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
-    return null;
+    if (isInside(facesContext, HtmlElements.COMMAND)) {
+      return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
+    } else {
+      return null;
+    }
   }
 
   @Override
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxInsideCommandRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxInsideCommandRenderer.java
deleted file mode 100644
index 09150af..0000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyCheckboxInsideCommandRenderer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.myfaces.tobago.internal.renderkit.renderer;
-
-import org.apache.myfaces.tobago.internal.component.AbstractUISelectManyCheckbox;
-import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.CssItem;
-import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
-
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-public class SelectManyCheckboxInsideCommandRenderer<T extends AbstractUISelectManyCheckbox>
-    extends SelectManyCheckboxRenderer<T> {
-
-  @Override
-  public void encodeBeginInternal(final FacesContext facesContext, final T component) throws IOException {
-    encodeBeginField(facesContext, component);
-  }
-
-  @Override
-  public void encodeEndInternal(final FacesContext facesContext, final T component) throws IOException {
-    encodeEndField(facesContext, component);
-  }
-
-  @Override
-  protected HtmlElements getOuterHtmlTag() {
-    return HtmlElements.TOBAGO_SELECT_MANY_CHECKBOX;
-  }
-
-  @Override
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectManyCheckbox select) {
-    return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
-  }
-}
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 f82fa5e..763bd94 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
@@ -27,7 +27,6 @@ import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.SelectItemUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.CssItem;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
@@ -59,8 +58,9 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
     final boolean required = component.isRequired();
     final boolean inline = component.isInline();
     final Markup markup = component.getMarkup();
+    final boolean isInsideCommand = isInside(facesContext, HtmlElements.COMMAND);
 
-    writer.startElement(getOuterHtmlTag());
+    writer.startElement(getOuterHtmlTag(facesContext));
     writer.writeClassAttribute(
         TobagoClass.SELECT_MANY_CHECKBOX,
         TobagoClass.SELECT_MANY_CHECKBOX.createMarkup(markup),
@@ -110,7 +110,7 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
         writer.startElement(HtmlElements.LABEL);
         writer.writeClassAttribute(
             BootstrapClass.FORM_CHECK_LABEL,
-            getCssItems(facesContext, component));
+            isInsideCommand ? BootstrapClass.DROPDOWN_ITEM : null);
         writer.writeAttribute(HtmlAttributes.FOR, itemId, false);
 
         if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
@@ -147,17 +147,18 @@ public class SelectManyCheckboxRenderer<T extends AbstractUISelectManyCheckbox>
   protected void encodeEndField(final FacesContext facesContext, final T component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
-    writer.endElement(getOuterHtmlTag());
+    writer.endElement(getOuterHtmlTag(facesContext));
 
     encodeBehavior(writer, facesContext, component);
   }
 
-  protected HtmlElements getOuterHtmlTag() {
-    return HtmlElements.DIV;
-  }
-
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectManyCheckbox select) {
-    return null;
+  /** XXX can this be removed? use always HtmlElements.TOBAGO_SELECT_MANY_CHECKBOX ??? */
+  protected HtmlElements getOuterHtmlTag(final FacesContext facesContext) {
+    if (isInside(facesContext, HtmlElements.COMMAND)) {
+      return HtmlElements.TOBAGO_SELECT_MANY_CHECKBOX;
+    } else {
+      return HtmlElements.DIV;
+    }
   }
 
   @Override
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioInsideCommandRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioInsideCommandRenderer.java
deleted file mode 100644
index cae0b6d..0000000
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneRadioInsideCommandRenderer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.myfaces.tobago.internal.renderkit.renderer;
-
-import org.apache.myfaces.tobago.internal.component.AbstractUISelectOneRadio;
-import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.CssItem;
-import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
-
-import javax.faces.context.FacesContext;
-import java.io.IOException;
-
-public class SelectOneRadioInsideCommandRenderer<T extends AbstractUISelectOneRadio> extends SelectOneRadioRenderer<T> {
-
-  @Override
-  public void encodeBeginInternal(final FacesContext facesContext, final T component) throws IOException {
-    encodeBeginField(facesContext, component);
-  }
-
-  @Override
-  public void encodeEndInternal(final FacesContext facesContext, final T component) throws IOException {
-    encodeEndField(facesContext, component);
-  }
-
-  @Override
-  protected HtmlElements getOuterHtmlTag() {
-    return HtmlElements.TOBAGO_SELECT_ONE_RADIO;
-  }
-
-  @Override
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectOneRadio select) {
-    return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
-  }
-}
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 60ccb89..cba6407 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
@@ -28,7 +28,6 @@ import org.apache.myfaces.tobago.internal.util.ObjectUtils;
 import org.apache.myfaces.tobago.internal.util.SelectItemUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.CssItem;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
@@ -61,8 +60,9 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
     final boolean required = component.isRequired();
     final boolean inline = component.isInline();
     final Markup markup = component.getMarkup();
+    final boolean isInsideCommand = isInside(facesContext, HtmlElements.COMMAND);
 
-    writer.startElement(getOuterHtmlTag());
+    writer.startElement(getOuterHtmlTag(facesContext));
     writer.writeClassAttribute(
         TobagoClass.SELECT_ONE_RADIO,
         TobagoClass.SELECT_ONE_RADIO.createMarkup(markup),
@@ -110,7 +110,7 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
         writer.startElement(HtmlElements.LABEL);
         writer.writeClassAttribute(
             BootstrapClass.FORM_CHECK_LABEL,
-            getCssItems(facesContext, component));
+            isInsideCommand ? BootstrapClass.DROPDOWN_ITEM : null);
         writer.writeAttribute(HtmlAttributes.FOR, itemId, false);
         if (item instanceof org.apache.myfaces.tobago.model.SelectItem) {
           final org.apache.myfaces.tobago.model.SelectItem tobagoItem =
@@ -146,17 +146,18 @@ public class SelectOneRadioRenderer<T extends AbstractUISelectOneRadio> extends
   protected void encodeEndField(final FacesContext facesContext, final T component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
-    writer.endElement(getOuterHtmlTag());
+    writer.endElement(getOuterHtmlTag(facesContext));
 
     encodeBehavior(writer, facesContext, component);
   }
 
-  protected HtmlElements getOuterHtmlTag() {
-    return HtmlElements.DIV;
-  }
-
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectOneRadio select) {
-    return null;
+  /** XXX can this be removed? use always HtmlElements.TOBAGO_SELECT_MANY_CHECKBOX ??? */
+  protected HtmlElements getOuterHtmlTag(final FacesContext facesContext) {
+    if (isInside(facesContext, HtmlElements.COMMAND)) {
+      return HtmlElements.TOBAGO_SELECT_ONE_RADIO;
+    } else {
+      return HtmlElements.DIV;
+    }
   }
 
   @Override
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java
index aba9947..9b91c16 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/BadgeTagDeclaration.java
@@ -42,7 +42,7 @@ import javax.faces.component.UIOutput;
         "javax.faces.component.behavior.ClientBehaviorHolder"
     },
     componentFamily = UIOutput.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.BADGE},
+    rendererType = RendererTypes.BADGE,
     allowedChildComponenents = "NONE",
     markups = {
         @Markup(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java
index 3b3fc36..f7056b3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/ButtonTagDeclaration.java
@@ -62,7 +62,7 @@ import javax.faces.component.UICommand;
         "org.apache.myfaces.tobago.component.SupportsAccessKey"
     },
     componentFamily = UICommand.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.BUTTON},
+    rendererType = RendererTypes.BUTTON,
     allowedChildComponenents = "NONE",
     facets = {
         @Facet(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java
index e96be42..4ce209c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinkTagDeclaration.java
@@ -59,7 +59,7 @@ import javax.faces.component.UICommand;
     uiComponentFacesClass = "javax.faces.component.UICommand",
     interfaces = "org.apache.myfaces.tobago.component.SupportsAccessKey",
     componentFamily = UICommand.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.LINK, RendererTypes.LINK_INSIDE_COMMAND},
+    rendererType = RendererTypes.LINK,
     allowedChildComponenents = "NONE",
     facets = {
         @Facet(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java
index 6370221..5398e6d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/LinksTagDeclaration.java
@@ -43,7 +43,7 @@ import javax.faces.component.UIPanel;
         // As long as no behavior event names are defined, ClientBehaviorHolder must be implemented for Mojarra.
         "javax.faces.component.behavior.ClientBehaviorHolder"
     },
-    rendererType = {RendererTypes.LINKS})
+    rendererType = RendererTypes.LINKS)
 public interface LinksTagDeclaration extends HasIdBindingAndRendered, IsVisual, HasTip, HasOrientation {
 
   /**
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java
index 970a056..acfc002 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/OutTagDeclaration.java
@@ -46,7 +46,7 @@ import javax.faces.component.UIOutput;
     uiComponent = "org.apache.myfaces.tobago.component.UIOut",
     uiComponentFacesClass = "javax.faces.component.UIOutput",
     componentFamily = UIOutput.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.OUT},
+    rendererType = RendererTypes.OUT,
     interfaces = {
         // As long as no behavior event names are defined, ClientBehaviorHolder must be implemented for Mojarra.
         "javax.faces.component.behavior.ClientBehaviorHolder"
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
index 9dfcdfb..1a215ab 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
@@ -58,7 +58,7 @@ import javax.faces.component.UISelectBoolean;
     uiComponent = "org.apache.myfaces.tobago.component.UISelectBooleanCheckbox",
     uiComponentFacesClass = "javax.faces.component.UISelectBoolean",
     componentFamily = UISelectBoolean.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.SELECT_BOOLEAN_CHECKBOX, RendererTypes.SELECT_BOOLEAN_CHECKBOX_INSIDE_COMMAND},
+    rendererType = RendererTypes.SELECT_BOOLEAN_CHECKBOX,
     allowedChildComponenents = "NONE",
     behaviors = {
         @Behavior(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
index ad775ea..bd562ac 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
@@ -58,7 +58,7 @@ import javax.faces.component.UISelectBoolean;
     uiComponent = "org.apache.myfaces.tobago.component.UISelectBooleanToggle",
     uiComponentFacesClass = "javax.faces.component.UISelectBoolean",
     componentFamily = UISelectBoolean.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.SELECT_BOOLEAN_TOGGLE},
+    rendererType = RendererTypes.SELECT_BOOLEAN_TOGGLE,
     allowedChildComponenents = "NONE",
     behaviors = {
         @Behavior(
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java
index 060bdb8..0a093f9 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyCheckboxTagDeclaration.java
@@ -60,7 +60,7 @@ import javax.faces.component.UISelectMany;
     uiComponent = "org.apache.myfaces.tobago.component.UISelectManyCheckbox",
     uiComponentFacesClass = "javax.faces.component.UISelectMany",
     componentFamily = UISelectMany.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.SELECT_MANY_CHECKBOX, RendererTypes.SELECT_MANY_CHECKBOX_INSIDE_COMMAND},
+    rendererType = RendererTypes.SELECT_MANY_CHECKBOX,
     allowedChildComponenents = {
         "javax.faces.SelectItem",
         "javax.faces.SelectItems"},
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java
index 6ff1cc1..5388174 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneChoiceTagDeclaration.java
@@ -58,7 +58,7 @@ import javax.faces.component.UISelectOne;
     uiComponent = "org.apache.myfaces.tobago.component.UISelectOneChoice",
     uiComponentFacesClass = "javax.faces.component.UISelectOne",
     componentFamily = UISelectOne.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.SELECT_ONE_CHOICE},
+    rendererType = RendererTypes.SELECT_ONE_CHOICE,
     allowedChildComponenents = {
         "javax.faces.SelectItem",
         "javax.faces.SelectItems"
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java
index 0078dfc..78b71b5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectOneRadioTagDeclaration.java
@@ -60,7 +60,7 @@ import javax.faces.component.UISelectOne;
     uiComponent = "org.apache.myfaces.tobago.component.UISelectOneRadio",
     uiComponentFacesClass = "javax.faces.component.UISelectOne",
     componentFamily = UISelectOne.COMPONENT_FAMILY,
-    rendererType = {RendererTypes.SELECT_ONE_RADIO, RendererTypes.SELECT_ONE_RADIO_INSIDE_COMMAND},
+    rendererType = RendererTypes.SELECT_ONE_RADIO,
     allowedChildComponenents = {
         "javax.faces.SelectItem",
         "javax.faces.SelectItems"
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java
index 9eb415b..bc8f4eb 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SeparatorTagDeclaration.java
@@ -35,7 +35,7 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
 @UIComponentTag(
     uiComponent = "org.apache.myfaces.tobago.component.UISeparator",
     componentFamily = "org.apache.myfaces.tobago.Separator",
-    rendererType = {RendererTypes.SEPARATOR},
+    rendererType = RendererTypes.SEPARATOR,
     allowedChildComponenents = "NONE",
     interfaces = {
         // As long as no behavior event names are defined, ClientBehaviorHolder must be implemented for Mojarra.
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlElements.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlElements.java
index 8f6b271..5d758cc 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlElements.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlElements.java
@@ -46,6 +46,8 @@ public enum HtmlElements {
   CODE("code", Qualifier.INLINE),
   COL("col", Qualifier.VOID),
   COLGROUP("colgroup"),
+  /** @deprecated */
+  @Deprecated
   COMMAND("command", Qualifier.VOID),
   DATALIST("datalist"),
   DD("dd"),
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 bf62ae6..1c9863d 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
@@ -38,7 +38,10 @@ import org.apache.myfaces.tobago.component.UIPanel;
 import org.apache.myfaces.tobago.component.UIPopup;
 import org.apache.myfaces.tobago.component.UISection;
 import org.apache.myfaces.tobago.component.UISegmentLayout;
+import org.apache.myfaces.tobago.component.UISelectBooleanCheckbox;
 import org.apache.myfaces.tobago.component.UISelectItem;
+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.UISeparator;
@@ -50,7 +53,6 @@ import org.apache.myfaces.tobago.internal.renderkit.renderer.ButtonRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.ButtonsRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.GridLayoutRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.InRenderer;
-import org.apache.myfaces.tobago.internal.renderkit.renderer.LinkInsideCommandRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.LinkRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.LinksRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.OutRenderer;
@@ -58,6 +60,9 @@ import org.apache.myfaces.tobago.internal.renderkit.renderer.PanelRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.PopupRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.SectionRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.SegmentLayoutRenderer;
+import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectBooleanCheckboxRenderer;
+import org.apache.myfaces.tobago.internal.renderkit.renderer.SelectManyCheckboxRenderer;
+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.SeparatorRenderer;
@@ -127,6 +132,9 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
     application.addComponent(Tags.style.componentType(), UIStyle.class.getName());
     application.addComponent(Tags.section.componentType(), UISection.class.getName());
     application.addComponent(Tags.selectItem.componentType(), UISelectItem.class.getName());
+    application.addComponent(Tags.selectBooleanCheckbox.componentType(), UISelectBooleanCheckbox.class.getName());
+    application.addComponent(Tags.selectManyCheckbox.componentType(), UISelectManyCheckbox.class.getName());
+    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.gridLayout.componentType(), UIGridLayout.class.getName());
@@ -138,7 +146,6 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
     renderKit.addRenderer(UIOut.COMPONENT_FAMILY, RendererTypes.OUT, new OutRenderer());
     renderKit.addRenderer(UIPanel.COMPONENT_FAMILY, RendererTypes.PANEL, new PanelRenderer());
     renderKit.addRenderer(UILink.COMPONENT_FAMILY, RendererTypes.LINK, new LinkRenderer());
-    renderKit.addRenderer(UILink.COMPONENT_FAMILY, RendererTypes.LINK_INSIDE_COMMAND, new LinkInsideCommandRenderer());
     renderKit.addRenderer(UILinks.COMPONENT_FAMILY, RendererTypes.LINKS, new LinksRenderer());
     renderKit.addRenderer(UIBox.COMPONENT_FAMILY, RendererTypes.BOX, new BoxRenderer());
     renderKit.addRenderer(UIButton.COMPONENT_FAMILY, RendererTypes.BUTTON, new ButtonRenderer());
@@ -148,6 +155,12 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
     renderKit.addRenderer(UIStyle.COMPONENT_FAMILY, RendererTypes.STYLE, new StyleRenderer());
     renderKit.addRenderer(UISection.COMPONENT_FAMILY, RendererTypes.SECTION, new SectionRenderer());
     renderKit.addRenderer(
+        UISelectBooleanCheckbox.COMPONENT_FAMILY, RendererTypes.SELECT_BOOLEAN_CHECKBOX, new SelectBooleanCheckboxRenderer());
+    renderKit.addRenderer(
+        UISelectManyCheckbox.COMPONENT_FAMILY, RendererTypes.SELECT_MANY_CHECKBOX, new SelectManyCheckboxRenderer());
+    renderKit.addRenderer(
+        UISelectManyListbox.COMPONENT_FAMILY, RendererTypes.SELECT_MANY_LISTBOX, new SelectManyListboxRenderer());
+    renderKit.addRenderer(
         UISelectOneRadio.COMPONENT_FAMILY, RendererTypes.SELECT_ONE_RADIO, new SelectOneRadioRenderer());
     renderKit.addRenderer(
         UISelectOneChoice.COMPONENT_FAMILY, RendererTypes.SELECT_ONE_CHOICE, new SelectOneChoiceRenderer());
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkRendererUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkRendererUnitTest.java
index 7178b01..2933aa7 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkRendererUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LinkRendererUnitTest.java
@@ -22,6 +22,11 @@ package org.apache.myfaces.tobago.internal.renderkit.renderer;
 import org.apache.myfaces.tobago.component.RendererTypes;
 import org.apache.myfaces.tobago.component.Tags;
 import org.apache.myfaces.tobago.component.UILink;
+import org.apache.myfaces.tobago.component.UISelectBooleanCheckbox;
+import org.apache.myfaces.tobago.component.UISelectItem;
+import org.apache.myfaces.tobago.component.UISelectManyCheckbox;
+import org.apache.myfaces.tobago.component.UISelectOneRadio;
+import org.apache.myfaces.tobago.component.UISeparator;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.junit.Assert;
 import org.junit.jupiter.api.Test;
@@ -31,6 +36,23 @@ import java.io.IOException;
 public class LinkRendererUnitTest extends RendererTestBase {
 
   @Test
+  public void booleanInsideLink() throws IOException {
+    final UILink c = (UILink) ComponentUtils.createComponent(
+        facesContext, Tags.link.componentType(), RendererTypes.Link, "id");
+    c.setLabel("dropdown");
+
+    final UISelectBooleanCheckbox s = (UISelectBooleanCheckbox) ComponentUtils.createComponent(
+        facesContext, Tags.selectBooleanCheckbox.componentType(), RendererTypes.SelectBooleanCheckbox, "id");
+    s.setLabel("boolean");
+
+    c.getChildren().add(s);
+
+    c.encodeAll(facesContext);
+
+    Assert.assertEquals(loadHtml("renderer/link/booleanInsideLink.html"), formattedResult());
+  }
+
+  @Test
   public void link() throws IOException {
     final UILink c = (UILink) ComponentUtils.createComponent(
         facesContext, Tags.link.componentType(), RendererTypes.Link, "id");
@@ -41,4 +63,84 @@ public class LinkRendererUnitTest extends RendererTestBase {
     Assert.assertEquals(loadHtml("renderer/link/link.html"), formattedResult());
   }
 
+  @Test
+  public void manyInsideLink() throws IOException {
+    final UILink c = (UILink) ComponentUtils.createComponent(
+        facesContext, Tags.link.componentType(), RendererTypes.Link, "id");
+    c.setLabel("dropdown");
+
+    final UISelectManyCheckbox s = (UISelectManyCheckbox) ComponentUtils.createComponent(
+        facesContext, Tags.selectManyCheckbox.componentType(), RendererTypes.SelectManyCheckbox, "many");
+    s.setLabel("many");
+
+    c.getChildren().add(s);
+
+    final UISelectItem i1 = (UISelectItem) ComponentUtils.createComponent(
+        facesContext, Tags.selectItem.componentType(), null, "i1");
+    i1.setItemLabel("Stratocaster");
+    s.getChildren().add(i1);
+    final UISelectItem i2 = (UISelectItem) ComponentUtils.createComponent(
+        facesContext, Tags.selectItem.componentType(), null, "i2");
+    i2.setItemLabel("Telecaster");
+    s.getChildren().add(i2);
+
+    c.encodeAll(facesContext);
+
+    Assert.assertEquals(loadHtml("renderer/link/manyInsideLink.html"), formattedResult());
+  }
+
+  @Test
+  public void radioInsideLink() throws IOException {
+    final UILink c = (UILink) ComponentUtils.createComponent(
+        facesContext, Tags.link.componentType(), RendererTypes.Link, "id");
+    c.setLabel("dropdown");
+
+    final UISelectOneRadio s = (UISelectOneRadio) ComponentUtils.createComponent(
+        facesContext, Tags.selectOneRadio.componentType(), RendererTypes.SelectOneRadio, "radio");
+    s.setLabel("radio");
+
+    c.getChildren().add(s);
+
+    final UISelectItem i1 = (UISelectItem) ComponentUtils.createComponent(
+        facesContext, Tags.selectItem.componentType(), null, "i1");
+    i1.setItemLabel("Stratocaster");
+    s.getChildren().add(i1);
+    final UISelectItem i2 = (UISelectItem) ComponentUtils.createComponent(
+        facesContext, Tags.selectItem.componentType(), null, "i2");
+    i2.setItemLabel("Telecaster");
+    s.getChildren().add(i2);
+
+    c.encodeAll(facesContext);
+
+    Assert.assertEquals(loadHtml("renderer/link/radioInsideLink.html"), formattedResult());
+  }
+
+  @Test
+  public void separatorInsideLink() throws IOException {
+    final UILink c = (UILink) ComponentUtils.createComponent(
+        facesContext, Tags.link.componentType(), RendererTypes.Link, "id");
+    c.setLabel("dropdown");
+
+    final UILink l1 = (UILink) ComponentUtils.createComponent(
+        facesContext, Tags.link.componentType(), RendererTypes.Link, "link1");
+    l1.setLabel("Link 1");
+    l1.setLink("https://www.apache.org/");
+
+    final UISeparator s = (UISeparator) ComponentUtils.createComponent(
+        facesContext, Tags.separator.componentType(), RendererTypes.Separator, "separator");
+
+    final UILink l2 = (UILink) ComponentUtils.createComponent(
+        facesContext, Tags.link.componentType(), RendererTypes.Link, "link2");
+    l2.setLabel("Link 2");
+    l2.setLink("https://www.apache.org/");
+
+    c.getChildren().add(l1);
+    c.getChildren().add(s);
+    c.getChildren().add(l2);
+
+    c.encodeAll(facesContext);
+
+    Assert.assertEquals(loadHtml("renderer/link/separatorInsideLink.html"), formattedResult());
+  }
+
 }
diff --git a/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html b/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html
new file mode 100644
index 0000000..64b0466
--- /dev/null
+++ b/tobago-core/src/test/resources/renderer/link/booleanInsideLink.html
@@ -0,0 +1,28 @@
+<!--
+ * 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-dropdown id='id' class='dropdown'>
+  <button type='button' id='id::command' name='id' data-toggle='dropdown' class='tobago-link dropdown-toggle'>
+    <tobago-behavior event='click' decoupled='decoupled'>
+    </tobago-behavior><span>dropdown</span></button>
+  <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
+    <tobago-select-boolean-checkbox id='id' class='tobago-selectBooleanCheckbox form-check'>
+      <input class='form-check-input' type='checkbox' value='true' name='id' id='id::field'>
+      <label class='form-check-label dropdown-item' for='id::field'></label>
+    </tobago-select-boolean-checkbox>
+  </div>
+</tobago-dropdown>
\ No newline at end of file
diff --git a/tobago-core/src/test/resources/renderer/link/manyInsideLink.html b/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
new file mode 100644
index 0000000..b15a572
--- /dev/null
+++ b/tobago-core/src/test/resources/renderer/link/manyInsideLink.html
@@ -0,0 +1,34 @@
+<!--
+ * 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-dropdown id='id' class='dropdown'>
+  <button type='button' id='id::command' name='id' data-toggle='dropdown' class='tobago-link dropdown-toggle'>
+    <tobago-behavior event='click' decoupled='decoupled'>
+    </tobago-behavior><span>dropdown</span></button>
+  <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
+    <tobago-select-many-checkbox class='tobago-selectManyCheckbox'>
+      <div class='form-check'>
+        <input class='form-check-input' type='checkbox' name='many' id='many::0' value=''>
+        <label class='form-check-label dropdown-item' for='many::0'>Stratocaster</label>
+      </div>
+      <div class='form-check'>
+        <input class='form-check-input' type='checkbox' name='many' id='many::1' value=''>
+        <label class='form-check-label dropdown-item' for='many::1'>Telecaster</label>
+      </div>
+    </tobago-select-many-checkbox>
+  </div>
+</tobago-dropdown>
\ No newline at end of file
diff --git a/tobago-core/src/test/resources/renderer/link/radioInsideLink.html b/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
new file mode 100644
index 0000000..bbb9ed7
--- /dev/null
+++ b/tobago-core/src/test/resources/renderer/link/radioInsideLink.html
@@ -0,0 +1,34 @@
+<!--
+ * 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-dropdown id='id' class='dropdown'>
+  <button type='button' id='id::command' name='id' data-toggle='dropdown' class='tobago-link dropdown-toggle'>
+    <tobago-behavior event='click' decoupled='decoupled'>
+    </tobago-behavior><span>dropdown</span></button>
+  <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
+    <tobago-select-one-radio class='tobago-selectOneRadio'>
+      <div class='form-check'>
+        <input class='form-check-input' type='radio' checked='checked' name='radio' id='radio::0' value=''>
+        <label class='form-check-label dropdown-item' for='radio::0'>Stratocaster</label>
+      </div>
+      <div class='form-check'>
+        <input class='form-check-input' type='radio' checked='checked' name='radio' id='radio::1' value=''>
+        <label class='form-check-label dropdown-item' for='radio::1'>Telecaster</label>
+      </div>
+    </tobago-select-one-radio>
+  </div>
+</tobago-dropdown>
\ No newline at end of file
diff --git a/tobago-core/src/test/resources/renderer/link/separatorInsideLink.html b/tobago-core/src/test/resources/renderer/link/separatorInsideLink.html
new file mode 100644
index 0000000..fcc0152
--- /dev/null
+++ b/tobago-core/src/test/resources/renderer/link/separatorInsideLink.html
@@ -0,0 +1,32 @@
+<!--
+ * 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-dropdown id='id' class='dropdown'>
+  <button type='button' id='id::command' name='id' data-toggle='dropdown' class='tobago-link dropdown-toggle'>
+    <tobago-behavior event='click' decoupled='decoupled'>
+    </tobago-behavior><span>dropdown</span></button>
+  <div class='dropdown-menu' aria-labelledby='id::command' name='id'>
+    <a id='link1' name='link1' href='https://www.apache.org/' class='tobago-link dropdown-item'>
+      <tobago-behavior event='click' omit='omit' decoupled='decoupled'>
+      </tobago-behavior><span>Link 1</span></a>
+    <tobago-separator id='separator' class='dropdown-divider'>
+    </tobago-separator>
+    <a id='link2' name='link2' href='https://www.apache.org/' class='tobago-link dropdown-item'>
+      <tobago-behavior event='click' omit='omit' decoupled='decoupled'>
+      </tobago-behavior><span>Link 2</span></a>
+  </div>
+</tobago-dropdown>
\ No newline at end of file