2

<h:selectOneMenu>または<p:selectOneMenu>ユーザーが作成した任意のクラスを値として持つConverter は必要ですか? つまり、次のコードはコンバーターなしで動作するはずですか?

<p:selectOneMenu value="#{bean.language}">
    <f:selectItems value="#{bean.allLanguages}" />
</p:selectOneMenu>

@Named(value = "bean")
@ConversationScoped
public class Bean {

    private Language language; // appropriate getter and setter are present

    public List<SelectItem> getAllLanguages() {
        // populates a list of select items with Strings as item labels and Languages as item values
    }

}

enumタイプ(言語)としてan を使用した同様のコードがあり、完全に機能します。しかし、型を通常の Java クラスに置き換えると、変換エラーが発生します。

4

2 に答える 2

1

JSFはデフォルトで文字列を想定するため、ここでコンバーターが必要です。これがコーディング方法です。JSF には、疑似エンティティを文字列に、またはその逆に変換する方法がわかりません。

いくつかのメモ:

1. getAsStringメソッドは、エンティティ/POJO の識別子を定義します。JSF (またはその他のもの) の選択が itemLabel として取得するものではありません。

2. コンバーターは、この悪名高い記事を使用して、実際のエンティティの DB を掘り下げることができます。

http://balusc.blogspot.de/2011/09/communication-in-jsf-20.html#ConvertingAndValidatingGETRequestParameters

その「パターン」で CDI アノテーションを使用することもできます。

3. あなたvalue = "bean"は冗長であり、選択のCDIスコープは通常@ViewScopedです。ただし、CDI @Named+ JSF@ViewScopedは、Seam 3 または Apache MyFaces CODI を使用しないと連携しないことに注意してください。

于 2013-02-15T11:55:51.023 に答える