java捕获hibernate异常与errorpage处理程序?
我正在捕获以下范围内的所有异常: JAVA可丢弃的 /页面。xhtml JAVA语言错误 /页面。xhtml
但如果我得到一个冬眠前: 组织。冬眠例外ConstraintViolationException
我是否必须为每个可能发生的异常定义错误页?我不能说“抓住每一个例外”吗
更新
重定向在404上工作。但在一个可丢弃的东西上却没有
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.xhtml</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error.xhtml</location>
</error-page>
# 1 楼答案
java.lang.Throwable
类是Java异常类层次结构中所有类中最不常见的祖先。所有异常和错误类都直接或间接地扩展Throwable
如果
Throwable
有一个错误页面,任何没有更具体错误页面的异常都会在那里结束因此,你的问题的答案是“不”。如果愿意,可以单独处理Hibernate异常(以您认为合适的任何粒度),但不必这样做
更新
异常没有生成错误页面的原因有很多。例如,它们可能发生在重定向处理过程中,或者可能被筛选器捕获。或者,在提交了响应头之后,可能会抛出它们;e、 g.如果在格式化响应HTML期间发生异常
(一个显著的线索是,当抛出异常时,您是否得到了任何错误页面。如果您得到的是'500'错误页面,则发生了一些。如果没有,则您可能处于阻止任何错误页面生成的情况之一。)
无论如何,下面是Servlet规范(3.0版)的说明。仔细阅读
10.9.2错误页面
# 2 楼答案
有一种更好的方法可以在JSF中处理异常——通过自定义异常处理程序,它可以在
faces-config.xml
中设置:在这种情况下,您可以检查异常,它是根本原因,并执行任何您想要的操作,因为您将始终拥有便利的
FacesContext
。下面是一个如何处理恼人的ViewExpiredException
的示例:工厂:
处理程序: