2

PrimeFaces Picklist で SelectItemsConverter を使用しようとしています。

XHTML:

<p:pickList id="plUpdateFirma" value="#{bsvttController.dlmFirma}" var="plFirma"
    itemLabel="#{plFirma.schluesselFirma}" itemValue="#{plFirma}"
    converter="FirmaConverter">

    <f:facet name="sourceCaption">
        Vorjahr
    </f:facet>
    <f:facet name="targetCaption">
        #{bsvttController.selSaison}
    </f:facet>

    <p:column>
        #{plFirma.schluesselFirma}  
    </p:column>

</p:pickList>

コンバータ:

@FacesConverter(value = "FirmaConverter")
public class FirmaConverter extends SelectItemsConverter
{ 

    @Override
    public String getAsString(final FacesContext facesContext, final UIComponent component, final Object object)
    {
        return ((Firma) object).getSchluesselFirma();
    }

}

豆:

@ManagedBean
@ViewScoped
public class BsvttController implements Serializable
{
    private DualListModel<Firma> dlmFirma;
    private List<Firma> dlmFirmaSource;
    private List<Firma> dlmFirmaTarget;
    private Firma firma;

    @PostConstruct
    public void init()
    {
        dlmFirmaSource = FirmaPersistenz.leseFirmaAlle();
        dlmFirmaTarget = new ArrayList<Firma>();
        dlmFirma = new DualListModel<>(dlmFirmaSource, dlmFirmaTarget);
    }

    public DualListModel<Firma> getDlmFirma()
    {
        return dlmFirma;
    }
    public List<Firma> getDlmFirmaSource()
    {
        return dlmFirmaSource;
    }
    public List<Firma> getDlmFirmaTarget()
    {
        return dlmFirmaTarget;
    }

    public void setDlmFirma(DualListModel<Firma> dlmFirma)
    {
        this.dlmFirma = dlmFirma;
    }
    public void setDlmFirmaSource(List<Firma> dlmFirmaSource)
    {
        this.dlmFirmaSource = dlmFirmaSource;
    }
    public void setDlmFirmaTarget(List<Firma> dlmFirmaTarget)
    {
        this.dlmFirmaTarget = dlmFirmaTarget;
    }

}

コンバーターのデバッグ中に、getAsString メソッドが正常に動作していることがわかりました。しかし、フォームを送信した後、両方の配列リスト (dlmFirmaSource と dlmFirmaTarget) は空です。

OmniFaces ショーケースでは、

「omnifaces.SelectItemsConverter を使用すると、たとえば複雑な Java モデル オブジェクトを f:selectItems の値としてドロップダウンに入力し、JSF にそれらを自動的に変換させることができます。カスタム コンバーターは、場合によってはそれに基づいてジョブを実行する必要がある場合があります。高価なサービス/DAO 操作。」

ただし、PickList コンポーネントの場合、f:selectItems タグは存在しません。

SelectItemsConverter は PickList コンポーネントをサポートしていますか?

4

2 に答える 2

4

SelectItemsConverter は PickList コンポーネントをサポートしていますか?

いいえ、そうではありません。

OmniFaces 1.5 から、目的に応じてomnifaces.ListConverterまたはを使用できます。での使用方法を示すショーケースomnifaces.ListIndexConverterも参照してください。ListConverter<p:pickList>

于 2013-06-25T19:11:47.977 に答える
2

いいえ、SelectItemsConverter は、さまざまな JSF コンポーネントで使用するコア JSF SelectItem オブジェクトの変換を処理します。

このクラスDualListModelは、高度な PrimeFaces データ コンポーネントで使用するための PrimeFaces 固有のクラスです。もちろん、これを回避するには、@PostConstructメソッドを使用してマネージド Bean で DualListModel を初期化し、コンバーターを必要としないようにするか、従来の方法でコンバーターを実装するだけです。converterPick Listの属性に関する PrimeFaces ガイドから:

コンポーネントのコンバーターを定義する el 式またはリテラル テキスト。EL 式の場合は、コンバーター インスタンスに解決されます。静的テキストの場合は、コンバーター ID を参照する必要があります

于 2013-02-12T13:26:48.573 に答える