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()
속성을 사용하여