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 (ab)using the unused(!)
SelectItem#getDescription()
property as below:And overriding the PrimeFaces
SelectManyCheckboxRenderer#encodeOptionLabel()
as below to recognize and render it:Which is registered as follows in
faces-config.xml
:It might be worth the effort to post an enhancement request to PF guys to include the item description. It isn't been used anywhere in their
UISelectOne
/UISelectMany
components.I had to modify BalusC's solution to make it work in my case. That is beacause I had to build the List of SelectItems on the Bean-side.
Then these SelectItems can be used with: