2016-07-06 17 views
0

我正在嘗試爲自定義對象使用轉換器,這是在primefaces'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標籤的車名,你必須使用selectItems的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> 

BTW不申報兩個轉換器(通過一個轉換器屬性,並通過F中的其他:轉換器),並正確覆蓋getAsObject方法(在Apply Request Values階段需要它)。檢查docs的詳細信息

相關問題