in impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlCheckboxRendererBase.java [214:352]
protected int renderGroupOrItemCheckbox(FacesContext facesContext,
UIComponent uiComponent, SelectItem selectItem,
boolean useSubmittedValues, Set lookupSet,
Converter converter, Boolean usingTable,
Integer itemNum) throws IOException
{
ResponseWriter writer = facesContext.getResponseWriter();
boolean isSelectItemGroup = (selectItem instanceof SelectItemGroup);
UISelectMany selectMany = (UISelectMany) uiComponent;
if (isSelectItemGroup)
{
if (usingTable == Boolean.TRUE)
{
writer.startElement(HTML.TR_ELEM, null);
}
writer.startElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM, null);
if (selectItem.isEscape())
{
writer.writeText(selectItem.getLabel(),HTML.LABEL_ATTR);
}
else
{
writer.write(selectItem.getLabel());
}
if (usingTable != null)
{
writer.endElement(HTML.TD_ELEM);
}
if (usingTable == Boolean.TRUE)
{
writer.endElement(HTML.TR_ELEM);
writer.startElement(HTML.TR_ELEM, null);
}
if (usingTable != null)
{
writer.startElement(HTML.TD_ELEM, null);
}
writer.startElement(usingTable != null ? HTML.TABLE_ELEM : HTML.UL_ELEM, null);
if (usingTable != null)
{
int border = 0;
Object borderObj = uiComponent.getAttributes().get("border");
if (null != borderObj)
{
border = (Integer) borderObj;
}
if (Integer.MIN_VALUE != border)
{
writer.writeAttribute(HTML.BORDER_ATTR, border, "border");
}
}
if(usingTable == Boolean.FALSE)
{
writer.startElement(HTML.TR_ELEM, null);
}
SelectItemGroup group = (SelectItemGroup) selectItem;
SelectItem[] selectItems = group.getSelectItems();
for (SelectItem groupSelectItem : selectItems)
{
itemNum = renderGroupOrItemCheckbox(facesContext, selectMany, groupSelectItem, useSubmittedValues,
lookupSet, converter, usingTable, itemNum);
}
if(usingTable == Boolean.FALSE)
{
writer.endElement(HTML.TR_ELEM);
}
writer.endElement(usingTable != null ? HTML.TABLE_ELEM : HTML.UL_ELEM);
writer.endElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM);
if (usingTable == Boolean.TRUE)
{
writer.endElement(HTML.TR_ELEM);
}
}
else
{
Object itemValue = selectItem.getValue(); // TODO : Check here for getSubmittedValue.
// Look at RendererUtils.getValue
String itemStrValue = org.apache.myfaces.core.api.shared.SharedRendererUtils.getConvertedStringValue(
facesContext, selectMany, converter, itemValue);
boolean checked = lookupSet.contains(itemStrValue);
// IF the hideNoSelectionOption attribute of the component is true
// AND this selectItem is the "no selection option"
// AND there are currently selected items
// AND this item (the "no selection option") is not selected
if (HtmlRendererUtils.isHideNoSelectionOption(uiComponent)
&& selectItem.isNoSelectionOption()
&& !lookupSet.isEmpty()
&& !checked)
{
// do not render this selectItem
return itemNum;
}
writer.write("\t\t");
if (usingTable == Boolean.TRUE)
{
writer.startElement(HTML.TR_ELEM, null);
}
writer.startElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM, null);
boolean disabled = selectItem.isDisabled();
String itemId = renderCheckbox(facesContext, selectMany, itemStrValue, disabled, checked, false, itemNum);
// label element after the input
boolean componentDisabled = isDisabled(facesContext, selectMany);
boolean itemDisabled = (componentDisabled || disabled);
HtmlRendererUtils.renderLabel(writer, selectMany, itemId, selectItem, itemDisabled, checked);
writer.endElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM);
if (usingTable == Boolean.TRUE)
{
writer.endElement(HTML.TR_ELEM);
}
// we rendered one checkbox --> increment itemNum
itemNum++;
}
return itemNum;
}