Primefaces工具提示号码:selectManyCheckbox(Primefaces too

2019-06-26 16:49发布

我想补充一个工具提示中的每个元素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>

roleConverterFacesConverter是转换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>

不过遗憾的是它不工作。

Answer 1:

(!),你可以使用未使用达到这个由(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组件。



Answer 2:

我不得不修改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}"/>


文章来源: Primefaces tooltip for p:selectManyCheckbox