Получить доступ к компоненту CDI в области сеанса из компонента CDI в области запроса - PullRequest
4 голосов
/ 15 декабря 2011

У меня уже есть один компонент CDI в области сеанса, который в настоящее время сохраняет данные пользователя. Теперь из другой области действия запроса я хотел бы получить доступ к этому компоненту для получения некоторых данных. У меня есть какая-то операция, которая зависит от имени пользователя. Это единственная информация, которая мне нужна.

Как получить к нему доступ?

AccountBean.java:

@Named("accountBean")
@SessionScoped
public class AccountBean implements Serializable {
    private static final long serialVersionUID = 16472027766900196L;

    @Inject
    AccountService accountService;

    private String login;
    private String password;
    // getters and setters ommited
}

Часть login.xhtml:

<h:form>
    <h:panelGrid columns="2">
        #{msgs.loginPrompt}
        <h:inputText id="login" value="#{accountBean.login}" />
        #{msgs.passwordPrompt}
        <h:inputSecret id="password" value="#{accountBean.password}" />
        <h:commandButton value="#{msgs.loginButtonText}"
            action="#{accountBean.login}" />
    </h:panelGrid>
</h:form>

SearchBean.java:

@Named("searchBean")
@RequestScoped
public class SearchBean {
        @Inject AccountBean accountBean;
            // some other stuff
}

1 Ответ

6 голосов
/ 15 декабря 2011

Просто @Inject it.

@Inject
private Bean bean;

Обратите внимание, что это не доступно в конструкторе принимающего компонента (невозможно внедрить что-либо в неструктурированный экземпляр,ты видишь).Самая ранняя точка доступа - это метод @PostConstruct.

@PostConstruct
public void init() {
    bean.doSomething();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...