Когда я определяю свой управляемый bean-компонент как CDI-компонент (@Named), он не отображается всплывающим окном ui: debug. Если я изменю определение на JSF @ManagedBean, он будет отображаться в переменных с областью видимости просто отлично. Есть ли что-нибудь дополнительное, что мне нужно сделать, чтобы сделать эту работу? Я использую Mojarra 2.1.JSF <ui:debug> не отображается CDI beans
3
A
ответ
4
Управляемые биты CDI не сохраняются в качестве прямых атрибутов области запроса/сеанса/приложения. Они абстрагируются от контекста CDI, для которого он в свою очередь зависит от реализации (например, Weld vs OpenWebBeans vs others), как именно они упоминаются в области. <ui:debug>
не предлагает встроенных средств для отображения активных управляемых бинов CDI (пока?).
Ваш лучший выбор - получить их вручную. Вы можете использовать следующий метод полезности для этого (который будет доступен в предстоящем OmniFaces 1.7 в Beans
служебный класс):
public static Map<Object, String> getActiveReferences(BeanManager beanManager, Class<? extends Annotation> scope) {
Map<Object, String> activeReferences = new HashMap<Object, String>();
Set<Bean<?>> beans = beanManager.getBeans(Object.class);
Context context = beanManager.getContext(scope);
for (Bean<?> bean : beans) {
Object reference = context.get(bean);
if (reference != null) {
activeReferences.put(reference, bean.getName());
}
}
return Collections.unmodifiableMap(activeReferences);
}
Вот как вы можете использовать его:
@Inject
private BeanManager manager;
public void collect() {
Map<Object, String> requestScopedBeans = Beans.getActiveReferences(manager, RequestScoped.class);
// Map key represents the instance and map value represents the managed bean name, if any.
// ...
}
Имейте в виду, что это относительно дорогостоящая работа. Так что действительно используйте его только для отладки.
Смежные вопросы
- 1. Преобразование JSF Управляемые бобы в CDI Beans
- 2. CDI beans without faces-config.xml
- 3. Нелинзивный экземпляр CDI SessionScoped beans
- 4. CDI Beans и Hibernate Envers
- 5. Имитировать CDI-компоненты динамически или вводить в не-cdi-beans
- 6. Сериализуемое на абстрактных базовых классах, предназначенных для JSF/CDI beans
- 7. Сервлеты и области CDI beans
- 8. Как связать фишки с CDI beans?
- 9. Перехватить частные методы внутри CDI beans
- 10. Поддерживает ли weblogic CDI Beans?
- 11. Джерси не вводит мои CDI beans
- 12. Страницы AJAX с CDI beans и @ConversationScoped
- 13. JSF/Facelets being beans и EJB3
- 14. разница между jsf beans и ejb beans
- 15. JSF CDI target unreachable
- 16. jsf cdi application architecture
- 17. Проблема с сериализацией CDI Beans на кластере
- 18. Экспозиция удаленных EJB как CDI beans
- 19. JSF Trouble with beans (scope)
- 20. По умолчанию Перехватчики в CDI Beans
- 21. Отключить сканирование CDI beans в WAR
- 22. Использование CDI ConversationScoped beans в контроллерах весны
- 23. Использование cdi в проекте ejb без jsf
- 24. CDI/JSF и JAX-RS?
- 25. Сомнения в том, как объединить CDI beans: SessionScoped и RequestScoped
- 26. TomEE + Omnifaces - тест - SEVERE: развертывание модуля CDI Beans не удалось
- 27. CDI beans внутри .jar не найдены контейнером (неудовлетворительные зависимости)
- 28. Форма JSF не отображается
- 29. Eclipse JSF anotations managed beans code complete
- 30. сохранение сессий в jsf и java beans
Вы тоже это придаете? Вы переключаете свои области JSF для областей CDI при переключении с '@ ManagedBean' на' @ Named'? –
Да, оба являются SessionScoped (в javax.faces.bean и javax.enterprise.context соответственно) – Catweazle