从请求范围的CDI Bean访问会话范围的CDI bean

riv*_*ket 4 cdi jsf-2

我已经有一个会话范围的CDI bean,它保留当前登录的用户数据.现在,从另一个请求作用域我想访问这个bean来获取一些数据.我有一些操作要做,这取决于用户登录.这是我需要的唯一信息.

如何访问它?

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
}
Run Code Online (Sandbox Code Playgroud)

部分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>
Run Code Online (Sandbox Code Playgroud)

SearchBean.java:

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

Bal*_*usC 6

就是@Inject这样.

@Inject
private Bean bean;
Run Code Online (Sandbox Code Playgroud)

请注意,这在接收bean的构造函数中不可用(无法在未构造的实例中注入某些内容,您可以看到).最早的接入点是一种@PostConstruct方法.

@PostConstruct
public void init() {
    bean.doSomething();
}
Run Code Online (Sandbox Code Playgroud)