ローカライズされた文字列を簡単に取得するために、任意のクラスに java.util.ResourceBundle を挿入できるプロデューサーを作成したいと考えています。私の ResourceBundle-Producer は次のようになります。
public class ResourceBundleProducer {
@Inject
public Locale locale;
@Inject
public FacesContext facesContext;
@Produces
public ResourceBundle getResourceBundle() {
return ResourceBundle.getBundle("/messages", locale )
}
}
Locale と FacesContext のインジェクションが機能します (Seam 3 Alpha Source から対応するプロデューサーを取得しました)。残念ながら、ResourceBundle は Serializable ではないため、この方法で生成することはできません。ResourceBundle を使用する Bean を呼び出す JSF ページにアクセスしようとすると、Weld から次のエラーが発生します。
Caused by: org.jboss.weld.IllegalProductException: WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans\\n\\nProducer\: org.jboss.weld.bean-/D:/Program Files (x86)/GlassFish-Tools-Bundle-For-Eclipse-1.2/glassfishv3/glassfish/domains/teachernews/applications/teachernews/-ProducerMethod-services.producers.ResourceBundleProducer.getResourceBundle()\\nInjection Point\: field web.PersonHome.bundle
ResourceBundleResolver を機能させる方法はありますか? または、同様の機能を実現する他のメカニズムはありますか? 前もって感謝します!
編集:
わかりました、ほとんど獲得できなかったポイントの一部を使用します ;) この問題の適切な回避策も受け入れます!
Producer の作成が機能しない別の例があります: FlashProducer です。Flash はシリアル化できないため、FacesContext-Flash も生成できません。