我正在运行一个JSF应用程序并声明了一些应用程序范围的后台bean(在common-beans.xml中或使用   @ManagedBean  和   @ApplicationScoped  注释).
如何从内部访问这些bean javax.servlet.http.HttpSessionListener  ?
我知道   FacesContext  会话监听器中没有这个,所以使用:
public class AnHTTPSessionListener implements HttpSessionListener {
    ...
    public void sessionDestroyed(HttpSessionEvent e) {
        AppBean appBean = (AppBean) FacesContext.getCurrentInstance()
                                                .getExternalContext()
                                                .getApplicationMap().get("appBean")
       ...
    }
...按预期抛出NPE.
我最终做的是使用env-entry元素(而不是使用应用程序范围的bean)声明我需要在web.xml中访问的应用程序范围的信息,然后使用以下命令检索该信息:
   InitialContext ic = new InitialContext();
   Context env = (Context) ic.lookup("java:comp/env");
   appName = (String) env.lookup("appBeanValue");
这不是我的想法,但它是一种解决方法.
JSF将应用程序范围的托管bean存储为ServletContext.
所以,这应该做:
public void sessionDestroyed(HttpSessionEvent e) {
    AppBean appBean = (AppBean) e.getSession().getServletContext().getAttribute("appBean");
    // ...
}
| 归档时间: | 
 | 
| 查看次数: | 7254 次 | 
| 最近记录: |