in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/CommandRendererBase.java [175:236]
public void encodeChildrenInternal(final FacesContext facesContext, final T component) throws IOException {
final boolean parentOfCommands = component.isParentOfCommands();
final boolean isInsideInputAfter = isInside(facesContext, HtmlElements.TOBAGO_IN)
&& isInside(facesContext, Facets.after);
final boolean disabled = component.isDisabled();
final TobagoResponseWriter writer = getResponseWriter(facesContext);
if (parentOfCommands) {
List<UIComponent> renderLater = null;
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(
TobagoClass.DROPDOWN__MENU,
isInsideInputAfter ? BootstrapClass.DROPDOWN_MENU_END : null,
disabled ? TobagoClass.DISABLED : null);
writer.writeAttribute(Arias.LABELLEDBY, component.getFieldId(facesContext), false);
writer.writeAttribute(HtmlAttributes.NAME, component.getClientId(facesContext), false);
for (final UIComponent child : component.getChildren()) {
if (child.isRendered()
&& !(child instanceof UIParameter)
&& !(child instanceof AbstractUIBadge)) {
if (child instanceof AbstractUIStyle) {
if (renderLater == null) {
renderLater = new ArrayList<>();
}
renderLater.add(child);
} else if (child instanceof AbstractUILink
|| child instanceof AbstractUISelectBooleanCheckbox
|| child instanceof AbstractUISelectBooleanToggle
|| child instanceof AbstractUISelectManyCheckbox
|| child instanceof AbstractUISelectOneRadio
|| child instanceof AbstractUISeparator
// rendering with inside command is best compromise for composite components
|| UIComponent.isCompositeComponent(child)) {
insideBegin(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
child.encodeAll(facesContext);
insideEnd(facesContext, HtmlElements.COMMAND); // XXX may refactor / cleanup
} else {
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(BootstrapClass.DROPDOWN_ITEM);
child.encodeAll(facesContext);
writer.endElement(HtmlElements.DIV);
}
}
}
writer.endElement(HtmlElements.DIV);
if (renderLater != null) {
for (UIComponent child : renderLater) {
child.encodeAll(facesContext);
}
}
} else {
for (final UIComponent child : component.getChildren()) {
if (!(child instanceof AbstractUIBadge)) {
child.encodeAll(facesContext);
}
}
}
}