I would like to add a tooltip for each element in a p:selectManyCheckBox. However I can’t come up with a solution.
I’ve got a class Role that has 3 properties, “id” (Long), “name” (String) and “description” (String). The name is displayed and I would like to have the description as a tooltip.
This is a working piece of code:
<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter">
<f:selectItems value="#{roleBean.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role}"/>
</p:selectManyCheckbox>
The roleConverter is a FacesConverter that converts the Role to an id and visa versa.
I came up with this:
<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>
But unfortunately it doesn’t work.
You can achieve this by using the
SelectItem#getDescription()property as below:This is supported since PrimeFaces 6.2 (actually because of this very answer you’re reading now).
In case you’re not on PrimeFaces 6.2 yet and cannot upgrade for some reason, then you need to manually override the PrimeFaces
SelectManyCheckboxRenderer#encodeOptionLabel()as below in order to recognize and render it:Which is registered as follows in
faces-config.xml: