此错误页面只有在你实际上是用于请求FacesServlet
的URL模式相匹配的URL。所以想象一下FacesServlet
映射到*.jsf
上,然后在Mojarra的情况下打开/somenotexistent.jsf
确实会抛出一个FileNotFoundException
的子类,它确实会匹配您的错误页面。
但是,如果你要求它做不的FacesServlet
的URL模式相匹配的URL,那么请求将被另一个servlet处理,而不是通常的容器本身DefaultServlet
。如果资源不存在,那么它通常会返回404而不是抛出异常。
你想添加另一个错误页面覆盖,以及:
<error-page>
<error-code>404</error-code>
<location>/faces/error.xhtml</location>
</error-page>
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/faces/error.xhtml</location>
</error-page>
然而,为了防止这种重复,你也可以考虑使用一个servlet filter其捕获的FileNotFoundException
任何实例从FacesServlet
未来然后正确地返回一个404。JSF实用程序库OmniFaces已经有这样一个过滤器,the FacesExceptionFilter
。这样你最终只能得到错误代码404上的错误页面。
然后会发生什么?你忘记描述确切的用例(你是如何设法促成行为的?)和问题症状(究竟发生了什么?),这对于识别原因非常重要。 – BalusC