5

ManagedBeanで使いたいConverter。はManagedBean、データベースからデータを取得する責任があります。Converter文字列をデータベースから取得する必要のあるオブジェクトに変換したいと思います。

これは私のコンバーターです

@FacesConverter(forClass=Gallery.class, value="galleryConverter")
public class GalleryConverter implements Converter {

    // of course this one is null
    @ManagedProperty(value="#{galleryContainer}")
    private GalleryContainer galleryContainer;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String galleryId) {
        return galleryContainer.findGallery(galleryId);
        ...
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object gallery) {
        ...
    }

}

私はそれがnullになることを知っており、注入しgalleryContainerたい場合はそれをマークすることもできます。問題は、私がそれを美しい方法でやりたいということです。私はいくつかの「奇妙な解決策」を探したくないのです。たぶん問題は私のアプリケーションにありますか?たぶん、データベースからデータを取得してコンバーターで使用する必要があるオブジェクトを作成するための他の良い解決策がありますか?また、ステートメントを使用して新しいオブジェクトを作成するのではなく、を使用することをお勧めします(テストと保守が簡単です)。助言がありますか?ManagedBeanConverterManagedBeanDependencyInjectionnew

4

1 に答える 1

15

現在、フェイス コンバーターは有効なインジェクション ターゲットではないため、を使用する代わりに を使用@FacesConverterする必要があります。@ManagedBeanそれにもかかわらず、コンバーターをマネージド Bean として選択できるため、ビューでは(コンバーター ID によるconverter="#{yourConverter}") ではなく (マネージド Bean 名による)として参照できます。converter="yourConverter"

基本的な使用例:

@ManagedBean
@RequestScoped
public class YourConverter implements Converter {

    @ManagedProperty...
    ...

    //implementation of converter methods

}

もちろん、BalusC の貴重なCommunication in JSF 2.0を読めば、この疑問にもいくらか光を当てることができます。

また、コンバータ Bean のスコープは、状態を保持する必要がない場合、アプリケーションやセッションなどに変更される可能性があることにも注意してください。

于 2013-03-13T18:35:58.973 に答える