2012-08-02 7 views
9

各要素のツールチップをp:selectManyCheckBoxに追加したいと思います。しかし、私は解決策を思いつくことはできません。pのためのPrimefacesのツールチップ:selectManyCheckbox

"id"(Long)、 "name"(String)、 "description"(String)の3つのプロパティを持つクラスRoleがあります。名前が表示され、その説明がツールチップとして表示されます。

これは、コードの作業部分である:

<p:selectManyCheckbox layout="pageDirection" value="#{roleBean.selectedRoles}" converter="roleConverter"> 
    <f:selectItems value="#{roleBean.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role}"/> 
</p:selectManyCheckbox> 

roleConverterは、ID及びその逆へRoleに変換FacesConverterあります。

私はこの思い付いた:

<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> 

しかし残念ながら、それは動作しません。

答えて

15

あなたは未使用を使用して(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コンポーネントのどこにも使用されていません。

関連する問題