in impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java [257:417]
protected int renderGroupOrItemRadio(FacesContext facesContext,
UIComponent uiComponent, SelectItem selectItem,
Object currentValue,
Converter converter, Boolean usingTable, String group,
Integer itemNum) throws IOException
{
ResponseWriter writer = facesContext.getResponseWriter();
boolean isSelectItemGroup = (selectItem instanceof SelectItemGroup);
// TODO : Check here for getSubmittedValue. Look at RendererUtils.getValue
// this is useless object creation
// Object itemValue = selectItem.getValue();
UISelectOne selectOne = (UISelectOne)uiComponent;
if (isSelectItemGroup)
{
if (usingTable == Boolean.TRUE)
{
writer.startElement(HTML.TR_ELEM, null); // selectOne);
}
writer.startElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM, null); // selectOne);
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); // selectOne);
}
if (usingTable != null)
{
writer.startElement(HTML.TD_ELEM, null);
}
writer.startElement(usingTable != null ? HTML.TABLE_ELEM : HTML.UL_ELEM, null); // selectOne);
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); // selectOne);
}
SelectItemGroup selectItemGroup = (SelectItemGroup) selectItem;
SelectItem[] selectItems = selectItemGroup.getSelectItems();
for (SelectItem groupSelectItem : selectItems)
{
itemNum = renderGroupOrItemRadio(facesContext, selectOne, groupSelectItem, currentValue,
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
{
String itemStrValue = org.apache.myfaces.core.api.shared.SharedRendererUtils.getConvertedStringValue(
facesContext, selectOne, converter, selectItem.getValue());
boolean itemChecked = (itemStrValue == null) ?
itemStrValue == currentValue :
"".equals(itemStrValue) ?
(currentValue == null || itemStrValue.equals(currentValue)) :
itemStrValue.equals(currentValue);
// 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()
&& currentValue != null && !"".equals(currentValue) && !itemChecked)
{
// do not render this selectItem
return itemNum;
}
//writer.write("\t\t");
boolean renderGroupId = false;
if (group != null && !group.isEmpty())
{
//no op
renderGroupId = true;
}
else
{
if (usingTable == Boolean.TRUE)
{
writer.startElement(HTML.TR_ELEM, null); // selectOne);
}
writer.startElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM, null); // selectOne);
}
boolean itemDisabled = selectItem.isDisabled();
String itemId = renderRadio(facesContext, selectOne, itemStrValue, itemDisabled,
itemChecked, renderGroupId, renderGroupId ? null : itemNum);
// label element after the input
boolean componentDisabled = isDisabled(facesContext, selectOne);
boolean disabled = (componentDisabled || itemDisabled);
HtmlRendererUtils.renderLabel(writer, selectOne,
renderGroupId ? selectOne.getClientId(facesContext) : itemId,
selectItem, disabled);
if (group != null && group.length() > 0)
{
//no op
}
else
{
writer.endElement(usingTable != null ? HTML.TD_ELEM : HTML.LI_ELEM);
if (usingTable == Boolean.TRUE)
{
writer.endElement(HTML.TR_ELEM);
}
}
// we rendered one radio --> increment itemNum
itemNum++;
}
return itemNum;
}