Я хочу создать 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 )
}
}
Работает Injection of Locale и FacesContext (взял соответствующих производителей из Seam 3 Alpha Source). Но, к сожалению, ResourceBundle не сериализуем и, следовательно, не может быть создан таким образом. Я получаю следующую ошибку от Weld при попытке доступа к JSF-странице, которая вызывает bean-компонент, использующий мой ResourceBundle:
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 не сериализуем.