sie*_*z0r 9 jsf tooltip primefaces
我想为a中的每个元素添加一个工具提示p:selectManyCheckBox
.但是我无法想出解决方案.
我有一个Role
有3个属性的类,"id"(长),"name"(字符串)和"description"(字符串).显示名称,我希望将描述作为工具提示.
这是一段有效的代码:
<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter">
<f:selectItems value="#{roleBean.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role}"/>
</p:selectManyCheckbox>
Run Code Online (Sandbox Code Playgroud)
这roleConverter
是一个FacesConverter
转换Role
为id,反之亦然.
我想出了这个:
<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>
Run Code Online (Sandbox Code Playgroud)
但不幸的是它不起作用.
Bal*_*usC 16
您可以通过(ab)使用未使用的(!)SelectItem#getDescription()
属性来实现此目的,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
并覆盖PrimeFaces SelectManyCheckboxRenderer#encodeOptionLabel()
如下识别和渲染它:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
其中注册如下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>
Run Code Online (Sandbox Code Playgroud)
向PF人员发布增强请求以包括项目描述可能是值得的.它没有在他们的任何地方使用SelectItem#getDescription()
/ SelectManyCheckboxRenderer#encodeOptionLabel()
组件.