我有一个基于 JSF(2.1.17) myfaces /PrimeFaces + Omnifaces on WAS 8.0.0.9 的 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 请求期间,但我不确定。
任何想法可能导致此问题?
我找到了这个错误报告,但找不到参考,getRequestDispatcher
所以它似乎不适用。
我还发现了这个问题:IBM JSF 中 FlashImpl.java 中的空指针异常,这实际上可能是重复的,但由于我有更多(可能相关)信息,这些信息可能适用于其他问题,也可能不适用于其他问题,所以我认为创建一个新问题会更好一。