我想创建一个 Producer,它可以将 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 不是可序列化的,因此不能以这种方式生成。尝试访问调用使用我的 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。FacesContext-Flash 也无法生成,因为 Flash 不可序列化。