Не следует вручную создавать экземпляры (управлять) bean-компонентами, используя оператор new
. Вы должны позволить JSF выполнять работу по управлению bean-компонентами и вместо этого получить экземпляр, управляемый JSF (экземпляр JSF).
Либо @ManagedProperty
в бобе, где вам это нужно:
@ManagedProperty("#{loginManager}")
private LoginManager loginManager;
Или, вызывая EL программно (что довольно ограниченно в вашем конкретном случае):
LoginManager loginManager = context.getApplication().evaluateExpressionGet(context, "#{loginManager}", LoginManager.class);
// ...
Если вы настаиваете на создании экземпляра и управлении бином самостоятельно, вы должны сами делать все инъекции зависимостей, также вызывая @PostConstruct
самостоятельно, если таковые имеются, и, наконец, также помещать бин в желаемую область действия самостоятельно. Э.Г.
LoginManager loginManager = new LoginManager();
loginManager.setUserSession(userSession);
// Now use reflection to find and invoke @PostConstruct method.
// Finally store in the map which conforms the bean's scope.
externalContext.getRequestMap().put("loginManager", loginManager);
Этот шаблон - то, что JSF должен забрать у вас из рук. Используйте это.