2012-08-02 3 views
9

p:selectManyCheckBox의 각 요소에 대한 툴팁을 추가하고 싶습니다. 그러나 나는 해결책을 생각해 낼 수 없다.프라임 용 도구 설명 : selectManyCheckbox

"id"(Long), "name"(String) 및 "description"(String)의 세 가지 속성이있는 클래스 Role이 있습니다. 이름이 표시되고 설명을 툴팁으로 사용하고 싶습니다.

<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter"> 
    <f:selectItems value="#{roleBean.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role}"/> 
</p:selectManyCheckbox> 

roleConverter 비자 반대의 ID로 Role 및 변환하는 FacesConverter입니다 :

코드의 작업 조각이다.

<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter"> 
    <c:forEach var="role" items="#{roleBean.roles}"> 
     <f:selectItem id="role#{role.id}" itemLabel="#{role.name}" itemValue="#{role}" /> 
     <p:tooltip for="role#{role.id}" value="#{role.description}"/> 
    </c:forEach> 
</p:selectManyCheckbox> 

을하지만 불행히도 그것은 작동하지 않습니다

나는이 함께했다. 인식하고 렌더링하기 위해 PrimeFaces 아래 SelectManyCheckboxRenderer#encodeOptionLabel()

<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter"> 
    <f:selectItems value="#{roleBean.roles}" var="role" 
     itemValue="#{role}" itemLabel="#{role.name}" itemDescription="#{role.description}" /> 
</p:selectManyCheckbox> 

그리고 오버라이드 (override) :

public class YourSelectManyCheckboxRenderer extends SelectManyCheckboxRenderer { 

    @Override 
    protected void encodeOptionLabel(FacesContext context, SelectManyCheckbox checkbox, String containerClientId, SelectItem option, boolean disabled) throws IOException { 
     ResponseWriter writer = context.getResponseWriter(); 
     writer.startElement("label", null); 
     writer.writeAttribute("for", containerClientId, null); 

     if (option.getDescription() != null) { 
      writer.writeAttribute("title", option.getDescription(), null); 
     } 

     if (disabled) { 
      writer.writeAttribute("class", "ui-state-disabled", null); 
     } 

     if (option.isEscape()) { 
      writer.writeText(option.getLabel(), null); 
     } else { 
      writer.write(option.getLabel()); 
     } 

     writer.endElement("label"); 
    } 

} 

(!) 아래와 같이 사용되지 않는 SelectItem#getDescription() 속성을 사용하여

답변

15

당신은 (AB)하여이를 달성 할 수 faces-config.xml에 다음과 같이 등록되어 있습니다 :

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

아이템 설명을 포함하도록 PF 담당자에게 개선 요청을 게시하는 것은 가치가 있습니다. UISelectOne/UISelectMany 구성 요소에서는 사용되지 않습니다.