2012-11-22 42 views
0

我在海关错误页面及其异常类型方面存在一些问题。 我在我的web.xml这个错误页面;在FileNotFoundException的情况下,web.xml错误页面不起作用

<error-page> 
    <exception-type>java.io.FileNotFoundException</exception-type> 
    <location>/faces/error.xhtml</location> 
</error-page> 

当我点击一个链接并且JSF文件不存在时,这个错误会发生。我的问题是,当这个错误发生时,网页不会重定向到我的error.xhtml页面。

这是如何造成的,我该如何解决?

+0

然后会发生什么?你忘记描述确切的用例(你是如何设法促成行为的?)和问题症状(究竟发生了什么?),这对于识别原因非常重要。 – BalusC

回答

4

此错误页面只有在你实际上是用于请求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上的错误页面。

3

不,如你所写,当你的servlet/JSP/JSF /无论抛出FileNotFoundException时显示错误页面。在404的情况下,你的servlet甚至没有被调用,所以它不会抛出任何东西。

使用上FileNotFoundException作品这

<error-page> 
    <error-code>404</error-code> 
    <location>/the404_page.html</location> 
</error-page> 
+1

不完全正确。当FacesServlet被请求时没有找到Facelets文件时,Mojarra抛出'FacesFileNotFoundException'。这个异常是'FileNotFoundException'的一个子类。 – BalusC

+1

Roberto,那么你实际上不会调用一个匹配'FacesServlet'的URL模式的URL。假设它映射到'* .jsf',那么尝试打开'/ somenotexistent.jsf'仍然会导致'FacesFileNotFoundException'而不是404。如果你使用了'/ somewhichdoesnotinvokejsf',那么它将不会通过' FacesServlet',如果它也不存在,那么它将导致404。 – BalusC

相关问题