如何捕获Faces FileNotFoundException

时间:2012-07-25 09:25:44

标签: jsf http-status-code-404 seam-solder

虽然我做了page所写的内容,但我仍然无法解决这个问题。问题是web.xml中的更改不会影响应用程序。顺便说一句,我正在使用ExceptionHandler(使用org.jboss.solder.exception.control.HandlesExceptions.HandlesExceptions批注)。我试图在我的ExceptionHandler类中添加一个方法但是我无法导入FacesFileNotFoundException。所以这是我的问题,虽然应用程序抛出了FacesFileNotFoundException,为什么我不能在页面中导入FacesFileNotFoundException异常类?

2 个答案:

答案 0 :(得分:1)

你必须在web.xml中正确添加错误页面,你必须把完整的异常和你抛出异常时重定向的目标位置是html而不是xhtml,这非常重要,它有是这样的

<error-page>
    <exception-type>com.sun.faces.context.FacesFileNotFoundException</exception-type>
    <location>/pagenotfound.html</location>
</error-page>

我不知道的是如何使控制台上没有显示异常,但它的工作方式很好

答案 1 :(得分:1)

  

我试图在我的ExceptionHandler类中添加一个方法但是我无法导入FacesFileNotFoundException。所以这是我的问题,虽然应用程序抛出了FacesFileNotFoundException,为什么我不能在页面中导入FacesFileNotFoundException异常类?

com.sun.*包特定于JSF实现Mojarra。显然,您在编译时类路径中有JSF API JAR文件,而不是JSF实现JAR文件。

这应该不是一个大问题。您应该尝试不要使您的Web应用程序依赖于特定的JSF实现。您应该尽量避免导入/引用特定于实现的类。 FacesFileNotFoundExceptionjava.io.FileNotFoundException延伸,因此我建议您将其导入。别忘了打开FacesException。对于某些提示,另请参阅OmniFaces'FullAjaxExceptionHandlerFacesExceptionFilter的源代码。

如果您绝对需要导入特定于Mojarra的FacesFileNotFoundException并希望编译代码,那么您应该将JSF实现JAR文件添加到编译时类路径中。具体取决于所使用的IDE。在Eclipse中,您应该在 Build Path 中的appserver中引用JSF实现JAR文件。

请注意,JSF ExceptionHandler默认 nothing web.xml中包含错误页面声明。