Я пытаюсь добавить атрибут title к компоненту selectfacesboxboxMenu, расширив SelectCheckboxMenuRenderer и переопределив метод encodeOption.overriding selectCheckboxMenuRenderer простых поверхностей
Но похоже, что используется другой рендерер. При проверке источника html страницы я могу видеть неупорядоченные элементы списка, которые я не вижу нигде в классе SelectCheckboxMenuRenderer.
Я не уверен, что мне ничего не хватает.
public class CustomSelectCheckboxMenuRenderer extends SelectCheckboxMenuRenderer
{
@Override
protected void encodeOption(FacesContext context, SelectCheckboxMenu menu, Object values, Object submittedValues,
Converter converter, SelectItem option, int idx) throws IOException
{
ResponseWriter writer = context.getResponseWriter();
String itemValueAsString = getOptionAsString(context, menu, converter, option.getValue());
String name = menu.getClientId(context);
String id = name + UINamingContainer.getSeparatorChar(context) + idx;
boolean disabled = option.isDisabled() || menu.isDisabled();
Object valuesArray;
Object itemValue;
if (submittedValues != null)
{
valuesArray = submittedValues;
itemValue = itemValueAsString;
}
else
{
valuesArray = values;
itemValue = option.getValue();
}
boolean checked = isSelected(context, menu, itemValue, valuesArray, converter);
if (option.isNoSelectionOption() && values != null && !checked)
{
return;
}
// input
writer.startElement("input", null);
writer.writeAttribute("id", id, null);
writer.writeAttribute("name", name, null);
writer.writeAttribute("type", "checkbox", null);
writer.writeAttribute("value", itemValueAsString, null);
if (checked)
writer.writeAttribute("checked", "checked", null);
if (disabled)
writer.writeAttribute("disabled", "disabled", null);
if (menu.getOnchange() != null)
writer.writeAttribute("onchange", menu.getOnchange(), null);
writer.endElement("input");
// label
writer.startElement("label", null);
writer.writeAttribute("for", id, null);
if (disabled)
writer.writeAttribute("class", "ui-state-disabled", null);
writer.writeAttribute("title", option.getDescription(), null);
if (option.isEscape())
writer.writeText(option.getLabel(), null);
else
writer.write(option.getLabel());
writer.endElement("label");
}
}
Это мой собственный классSelectCheckboxMenuRenderer. Я пометил использование строки, которую я добавил в код, используя *. Дайте мне знать, если я что-то упустил.