JSF / MyFaces失去FacesContext的原因可能是什么?

时间:2015-06-15 07:15:57

标签: jsf nullpointerexception myfaces facescontext

我在WAS 8.0.0.9上有一个基于JSF(2.1.17)myfaces / PrimeFaces + Omnifaces的Web应用程序

大部分时间一切正常,但偶尔会出现以下异常:

java.lang.NullPointerException
        at org.apache.myfaces.shared.context.flash.FlashImpl.isKeepMessages(FlashImpl.java:388)
        at org.apache.myfaces.shared.context.flash.FlashImpl._saveMessages(FlashImpl.java:668)
        at org.apache.myfaces.shared.context.flash.FlashImpl.doPostPhaseActions(FlashImpl.java:269)
        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:254)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:199)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
        at org.omnifaces.filter.FacesExceptionFilter.doFilter(FacesExceptionFilter.java:56)
        at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)

// ...更多过滤器......

查看FlashImpl line388时,如果找到:

@Override
public boolean isKeepMessages()
{
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext(); //<-- line 388
    Map<String, Object> requestMap = externalContext.getRequestMap();
    Boolean keepMessages = (Boolean) requestMap.get(FLASH_KEEP_MESSAGES);

    return (keepMessages == null ? Boolean.FALSE : keepMessages);
}

所以看起来没有FacesContext。虽然(再次查看代码)它应该在FacesServlet.service中进一步向上调用堆栈。

我们注册的一个过滤器记录了在JSF生命周期的不同阶段使用的时间,并且它抱怨阶段RENDER_RESPONSE已经启动,尽管它已经在运行。

日志记录还表明,在当前请求中找不到请求的页面,因此请求了适当的错误页面。

所有这些可能在Ajax请求期间发生,但我不确定。

可能导致此问题的任何想法?

我找到this bugreport但无法找到对getRequestDispatcher的引用,因此它似乎无法应用。

我还发现了这个问题:Null pointer exception in FlashImpl.java in IBM JSF实际上可能是重复的,但由于我有更多(可能是相关的)信息可能会或可能不会适用于另一个问题,我认为最好创建一个新问题。

0 个答案:

没有答案