Я хочу создать 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 не является Serializable и поэтому не может быть произведен таким образом. Я получаю следующую ошибку от 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 работать? Или есть другие механизмы для получения аналогичной функциональности? Спасибо заранее!
EDIT:
Хорошо, я потратил некоторые из моих едва заработанных очков;) Также примет хороший обходной путь для этой проблемы!
У меня появился еще один пример, когда создание Producer не работает: FlashProducer. FacesContext-Flash также не может быть создан, потому что Flash не является сериализуемым.