Получить управляемый компонент сеанса с помощью CDI

У меня есть управляемый компонент, который находится в области сеанса

@ManagedBean(name = "loginAction")
@SessionScoped
public class LoginAction implements OnReceiveListner, Serializable {}

В вызове сервлета я получаю это, используя

LoginAction loginAction = (LoginAction) request.getSession().getAttribute("loginAction");

Теперь мне было интересно, могу ли я вызвать это, используя CDI для каждого сеанса. Нравится

@Inject LoginAction loginAction(current session)

Как я могу это сделать


person LynAs    schedule 26.12.2014    source источник
comment
Фасоль LoginAction украшена @ManagedBean (я предположил, что она из пакета javax.faces.bean. Значит, не из javax.annotation). Таким образом, это управляемый компонент JSF. Почему бы просто не использовать CDI для управления вашими bean-компонентами? Если это компонент CDI, его можно внедрить в любой другой компонент (бины) с любой областью действия — более широкой или узкой. Что вы на самом деле пытаетесь сделать?   -  person Tiny    schedule 26.12.2014
comment
Не могли бы вы дать мне пример кода. Я пытаюсь вызвать функцию LoginAction, она находится в области сеанса, поэтому каждый пользователь должен видеть значение объекта сеанса LoginAction.   -  person LynAs    schedule 26.12.2014
comment
Вы можете просто внедрить этот компонент (при условии, что он управляется менеджером/реализацией CDI, такой как Weld) в целевой сервлет, используя аннотацию @Inject. Управляемые компоненты JSF управляются инфраструктурой JSF. Таким образом, они недоступны в сервлете. JSF хранит сеансовые компоненты в java.util.Map, используя имя компонента в качестве ключа. Таким образом, он доступен как атрибут сеанса. Вы, видимо, делаете это правильно. Просто сам bean-компонент не может быть внедрен в целевой сервлет, если он не управляется CDI.   -  person Tiny    schedule 26.12.2014
comment
хорошо, опубликуйте это как ответ, я приму это. Благодарность   -  person LynAs    schedule 26.12.2014