Возможно ли использовать bean-компонент в качестве поля в контексте контекста пользовательской области @SessionScoped
?Использовать инъекции в настраиваемом диапазоне
Я пишу пользовательскую область («ScreenScoped») с CDI, так что она примерно такая же, как у CDI @ViewScoped
(я делаю это, потому что последнее не совместимо с WebSphere). Пока мой объем действует как @ApplicationScoped
. Я хотел бы использовать мой класс @SessionScoped NavigationHandler
, который вызывается каждый раз, когда пользователь щелкает ссылку или кнопку, чтобы определить, когда закончится мой жизненный цикл ScreenScoped. Однако я получаю сообщение об ошибке, когда пытаюсь использовать поле @Inject
ed.
public class ScreenContext
implements Context
{
@Inject
private NavigationHandler navigationHandler;
...
}
NullPointerException возникает из-за этого @Inject
:
16:55:07,492 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-localhost/127.0.0.1:8443-10) Error Rendering View[/page/hello.xhtml]: javax.el.ELException: /page/hello.xhtml @24,58 visible="#{helloController.popupshowed}": java.lang.NullPointerException
...
Caused by: java.lang.NullPointerException
at com.mypackage.scope.screenscope.ScreenContext.get(ScreenContext.java:38) [myproject.jar:]
линия 38 в первый раз я называю инжектированное поле:
System.out.println("Navigation is used: " + navigationHandler.getUserId());
Используйте BeanManager, чтобы получить NavigationHandler bean – Rouliboy
Поскольку пользовательский контекст зарегистрирован через Extension, инъекция не может быть выполнена – Rouliboy