2017-05-31 27 views
1

PrimeFacesのpickListをカスタムコンバータで使用しています。カスタムコンバータで変換された値が表示されない

JSF:

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

そして、私のカスタムコンバータは、次のようになります:

offerController.costsAsDualListModel

<p:pickList converter="costsConverter" value="#{offerController.costsAsDualListModel}" var="cost" itemLabel="#{cost}" itemValue="#{cost}" /> 
は、次のようになります

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が正しいですが、内部の私のピックリスト私はまだオブジェクトを参照して、戻り値ではありませんgetAsString()

picklist要素内で使用しようとしました。同じ問題。また、私はコンバータをfaces-config.xmlに登録しました:

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

何が問題なのですか?

+0

を使用し、これらの2つのQ/Aで使用されています。これはjsfアプリケーション設定ファイル(faces-config.xml)または '@ FacesConverter'アノテーションの' 'の値です。 –

+0

ラベルの場合、コンバータは不要です(使用さえしません)。そこに '#{cost.no}}を使ってください... – Kukeltje

答えて

2

このような値は、ピックリスト、選択名などのコンポーネントの値には間違っていますが、ラベルには表示されません。コンバーターはラベルではなく値のためのものなので、変換された値は決して表示されませんが、ラベルやすべてが正しく動作します。ちょうどitemLabel="#{cost.no}"を使用すれば、すべてがうまくいくはずです(賢明に表示する)。

どのようにそれはまたあなたが `converter`属性でconverterIDを使用する必要がコンバータ

+0

本当にありがとうございます!これは 'selectonemenu'で使用する方法ですが、' picklist'の値は 'List(リスト)'の代わりに 'Lists <>'要素であるソースとtargerを持つ 'DualListModel <>' <> 'だから私は「いいえ」にアクセスする方法を知らない。 – antarkt1s

関連する問題