2013-09-06 3 views
1

Я пытаюсь добавить атрибут 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. Я пометил использование строки, которую я добавил в код, используя *. Дайте мне знать, если я что-то упустил.

ответ

1

Работы для меня. Видимо, вы забыли зарегистрировать рендер в faces-config.xml.

Вот как я это сделал, со всем классом copypasted неизмененной в com.example пакет:

<render-kit> 
    <renderer> 
     <component-family>org.primefaces.component</component-family> 
     <renderer-type>org.primefaces.component.SelectCheckboxMenuRenderer</renderer-type> 
     <renderer-class>com.example.CustomSelectCheckboxMenuRenderer</renderer-class> 
    </renderer> 
</render-kit> 

Вам нужно отредактировать только <renderer-class>, чтобы соответствовать FQN вашего класса визуализатора.

Смежные вопросы