2016-07-06 12 views
0

私は、プリムフェイス 'selectCheckboxMenuで使用されているカスタムオブジェクトにコンバーターを使用しようとしています。selectCheckboxMenuでカスタムオブジェクトのコンバーターを使用できません

これはJSFの一部です:

<p:outputLabel value="#{msg.cars}: " for="cars" /> 
<p:selectCheckboxMenu id="cars" 
    value="#{controller.selected.cars}" 
    converter="carConverter" label="#{msg.cars}" 
    filter="true" filterMatchMode="startsWith" 
    panelStyle="width:200px"> 
    <f:selectItems 
     value="#{controller.available.cars}" /> 
    <f:converter converterId="carConverter" /> 
</p:selectCheckboxMenu> 

そして、これは私のコンバータです:

@FacesConverter("carConverter") 
public class CarConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String newValue) { 
     return null; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object object) { 
     if (object == null) { 
      return ""; 
     } 
     if (object instanceof Car) { 
      Car car = (Car) object; 
      String name = car.getName(); 
      return name; 
     } else { 
      throw new ConverterException(new FacesMessage(object + " is not a valid car")); 
     } 
    } 
} 

getAsString()が正しい文字列を返します。しかしselectCheckboxMenuにはオブジェクトがリストされ、ストリングはリストされません。

何か不足していますか?

+1

コンバータはラベル用ではなく値用です。 – BalusC

答えて

1

あなたはcheckboxMenuラベルでの車名を表示する必要がある場合は、選択項目ITEMLABELが

<p:outputLabel value="#{msg.cars}: " for="cars" /> 
<p:selectCheckboxMenu id="cars" 
    value="#{controller.selected.cars}" 
    converter="carConverter" 
    filter="true" filterMatchMode="startsWith" 
    panelStyle="width:200px"> 
    <f:selectItems value="#{controller.available.cars}" var="car" itemLabel="#{car.name}" itemValue="#{car}"/> 
</p:selectCheckboxMenu> 

ところで、2つのコンバータ(converter属性を介して1とFを介して他のを宣言していない属性を使用する必要があります:コンバータを)、getAsObjectメソッドを正しくオーバーライドします(リクエスト値の適用フェーズで必要です)。詳細については、docsを参照してください。

関連する問題