FacesContext在ApplicationScoped bean中解析为null

时间:2014-02-13 18:51:46

标签: jsf nullpointerexception servlet-filters jsf-2.2 facescontext

我有一个过滤器:UserSessionFilter.java,用于处理用户会话和ApplicationScoped bean:Config.java,主要是为了让我可以访问DAO factory

Config.java

@ManagedBean (eager = true)
@ApplicationScoped
public class Config implements Serializable {...

过滤器调用Config中的方法来获取DAOFactory对象:

过滤方法

@Override
public void init(FilterConfig filterConfig) {
    daoFactory = Config.getInstance().getDAOFactory();
}

配置方法

public static Config getInstance() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        return (Config) facesContext.getApplication().evaluateExpressionGet(
                 facesContext, "#{config}", Config.class);
}

我的问题是facesContext设置为null。从Mojarra切换到MyFaces之后,这个问题就开始发生了,虽然看起来很奇怪,但这会导致它。

1 个答案:

答案 0 :(得分:0)

FacesContext不能在Filter中使用。请参阅thisthis个答案。原因是:

  

FacesContext由FacesServlet创建,因此只能在FacesServlet处理的任何Java代码中使用,FacesServlet涵盖所有JSF工件,例如托管bean和阶段监听器