in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListRenderer.java [224:266]
private void encodeSelectItem(
FacesContext facesContext, TobagoResponseWriter writer, T component, SelectItem item,
Object[] values, String[] submittedValues, boolean disabled, boolean group) throws IOException {
Object itemValue = item.getValue();
// when using selectItem tag with a literal value: use the converted value
if (itemValue instanceof String && values != null && values.length > 0 && !(values[0] instanceof String)) {
itemValue = ComponentUtils.getConvertedValue(facesContext, component, (String) itemValue);
}
final String formattedValue = getFormattedValue(facesContext, (T) component, itemValue);
final boolean contains;
if (submittedValues == null) {
contains = ArrayUtils.contains(values, itemValue);
} else {
contains = ArrayUtils.contains(submittedValues, formattedValue);
}
if (item.isNoSelectionOption() && component.isRequired() && values != null && values.length > 0 && !contains) {
// skip the noSelectionOption if there is another value selected and required
return;
}
writer.startElement(HtmlElements.TR);
writer.writeAttribute(DataAttributes.VALUE, formattedValue, true);
writer.writeClassAttribute(
TobagoClass.SELECT__ITEM,
contains ? BootstrapClass.TABLE_PRIMARY : null,
disabled || item.isDisabled() ? TobagoClass.DISABLED : null,
disabled || item.isDisabled() ? BootstrapClass.DISABLED : null);
writer.writeAttribute(HtmlAttributes.TABINDEX, -1);
writer.startElement(HtmlElements.TD);
writer.writeAttribute(HtmlAttributes.VALUE, formattedValue, true);
if (group) {
writer.startElement(HtmlElements.SPAN);
}
final String label = item.getLabel();
if (label != null) {
writer.writeText(label);
}
if (group) {
writer.endElement(HtmlElements.SPAN);
}
writer.endElement(HtmlElements.TD);
writer.endElement(HtmlElements.TR);
}