14

コンバーターを書きました。CDIとインジェクションを並行して使用しています。その場合、クラスは注入されません。注射を可能にするにはどうすればよいですか?

@FacesConverter(forClass = MyClass.class)

public class MyConverter implements Converter{

    @EJB
    private ClassForEJB classForEJB;

    @Inject
    private ClassForInject classForInject;

// Converter Methods
}
4

1 に答える 1

29

@FacesConverter適格な注射標的ではありません。@ManagedBeanまたはに置き換えます@Named。CDIも使用したいので、を使用します@Named

@Named
@ApplicationScoped // I assume that your converter doesn't have any state.
public class MyConverter implements Converter {
    // ...
}

ビューでの参照方法を変更するだけで済みます。もう頼ることはできませforClassん。明示的に指定する必要があります#{myConverter}

<h:inputSomething ... converter="#{myConverter}" />

また

<h:inputSomething ...>
    <f:converter binding="#{myConverter}" />
</h:inputSomething>

本当に@FacesConverterを支持する必要がある場合はforClass、JNDIによって手動でEJBを取得する必要があります。具体的な例は、このブログ記事に示されています。ただし、CDIBeanの場合はわかりません。

JSFの担当者は、この恥ずかしい見落としを確認しており@FacesConverter、今後のJSF2.2で適格な注入ターゲットを作成します。JSF仕様の問題763JSF2.3も参照してください

参照:


JSFユーティリティライブラリOmniFacesを使用している場合、または使用を許可している場合は、バージョン1.6以降、OmniFaces JARをインストールするだけで、Webアプリ内/WEB-INF/libのすべて@FacesConverterのs(および@FacesValidators)が追加なしで自動的にCDIおよびEJBインジェクションの対象になります。努力。

于 2012-10-31T11:26:10.890 に答える