2017-05-31 76 views
1

我正在使用自定義轉換器的PrimeFaces'pickList由自定義轉換器轉換的值不顯示

JSF:

<p:pickList converter="costsConverter" value="#{offerController.costsAsDualListModel}" var="cost" itemLabel="#{cost}" itemValue="#{cost}" /> 

offerController.costsAsDualListModel看起來是這樣的:

public DualListModel<Cost> getCostsAsDualListModel() { 
    DualListModel<Cost> costsDualList; 
    List<Cost> costsSource = new ArrayList<Cost>(); 
    List<Cost> costsTarget = new ArrayList<Cost>(); 
    for (Cost c : costs) { 
     costsSource.add(c); 
    } 
    costsDualList = new DualListModel<Cost>(costsSource, costsTarget); 
    return costsDualList; 
} 

我的自定義轉換器看起來像這樣:

public String getAsString(FacesContext context, UIComponent component, Object object) { 
    if (object == null) { 
     return ""; 
    } 
    Integer no = ((Cost) object).getNo(); 
    String valueOf = String.valueOf(no); 
    return valueOf; 
} 

getAsString()被調用,valueOf是正確的,但在我的選項列表我仍然看到對象而不是返回值fo getAsString()

我試圖在picklist元素內使用<f:converter converterId="costsConverter"/>。同樣的問題。我還註冊了轉換器faces-config.xml

<converter> 
    <converter-id>costsConverter</converter-id> 
    <converter-class>com.my.converter.CostsConverter</converter-class> 
</converter> 

有什麼問題?

+0

你必須使用converterID用'converter'屬性。這是jsf應用程序配置文件(faces-config.xml)或「@ FacesConverter」註釋中'<轉換器id>的值。 –

+0

對於標籤不需要轉換器(甚至沒有使用)。只需在那裏使用'#{cost.no} ... – Kukeltje

回答

2

您對組件中的值(例如選項列表,selectonemenus等)有錯誤的理解。這些值從不顯示,但標籤是。由於轉換器是用於值的,而不是標籤,所以您永遠不會看到轉換的值,但標籤和所有內容的行爲都應該如此。只需使用itemLabel="#{cost.no}",一切都應該沒問題(顯示方式)。

參見例如它是如何在這兩個Q/A使用也使用一個轉換器

+0

非常感謝您的回答!這是我在'selectonemenu'中使用它的方式,但是'picklist'的值使用'DualListModel <>'來源和目標(它們都是'Lists <>'元素)而不是'List <>'。所以我不知道如何訪問'no'。 – antarkt1s