【发布时间】:2012-11-17 09:19:27
【问题描述】:
我正在运行一个 JSF 应用程序并声明了一些应用程序范围的支持 bean(在 common-beans.xml 中或使用 @ManagedBean 和 @ApplicationScoped注释)。
如何从 javax.servlet.http.HttpSessionListener 内部访问这些 bean?
我了解FacesContext 在会话侦听器中不可用,因此使用:
public class AnHTTPSessionListener implements HttpSessionListener {
...
public void sessionDestroyed(HttpSessionEvent e) {
AppBean appBean = (AppBean) FacesContext.getCurrentInstance()
.getExternalContext()
.getApplicationMap().get("appBean")
...
}
...按预期抛出 NPE。
更新:
(在 BalusC 回答之前)我最终做的是使用 env-entry 元素在 web.xml 中声明我需要访问的应用程序范围的信息(而不是使用应用程序范围的 bean ) 然后使用以下方法检索该信息:
InitialContext ic = new InitialContext();
Context env = (Context) ic.lookup("java:comp/env");
appName = (String) env.lookup("appBeanValue");
这不是我的想法,但这是一种解决方法。
【问题讨论】:
标签: jsf