我想补充一个工具提示中的每个元素p:selectManyCheckBox
。 但是我不能拿出一个解决方案。
我有一类Role
有3个属性,“ID”(龙),“名”(字符串)和“说明”(字符串)。 名称显示,我想有说明作为工具提示。
这是一个代码块的工作:
<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter">
<f:selectItems value="#{roleBean.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role}"/>
</p:selectManyCheckbox>
该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>
不过遗憾的是它不工作。
(!),你可以使用未使用达到这个由(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>
并重写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");
}
}
这是注册为如下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
组件。
我不得不修改BalusC的解决方案,使之在我的情况下工作。 这是东阳我必须建立在豆侧一个SelectItems的名单。
public List<SelectItem> getMyItems(){
List<SelectItem> mySelectItems = new ArrayList<>();
[loop or ohter code to collect items]
// create SelectItem with description
mySelectItems.add(new SelectItem([value], [label], [description]));
...
return mySelectItems;
}
然后,这些一个SelectItems可以用于:
<f:selectItems value="#{myBean.myItems}"/>