0

我将 JSF 与 JPA 一起使用。我的错误处理是由一个全局异常处理程序完成的,如果发生任何错误,它将被触发。在这个处理程序中,我只是重定向到我的 error.xhtml。

除了 JPA 处理程序之外,这工作正常。如果@EJB jpa 处理程序产生错误,在我的情况下,我将其视为 EJB 异常。在这种情况下,jsf 重定向不起作用。

FacesContext.getCurrentInstance().getExternalContext().redirect("/error/");

但我没有收到任何错误消息。我认为这与一些生命周期问题有关,但我不知道如何解决它。我只想用 jpa 和 jsf 实现全局错误处理,它总是在一个特定的错误页面结束:(

4

1 回答 1

0

您是否使用一些 jsf 机制捕获异常?

如果是,那么 JSF 可能错过了那些 JPA 异常。您可以尝试通过 web.xml 捕获这些:

<error-page>
       <exception-type>javax.faces.application.ViewExpiredException</exception-type>
       <location>/error_redirect.html</location>
</error-page>

<error-page>
    <error-code>404</error-code>
    <location>/error_redirect.html</location>
</error-page>

<error-page>
    <error-code>500</error-code>
    <location>/error_redirect.html</location>
</error-page>

<error-page>
       <exception-type>java.lang.Exception</exception-type>
       <location>/error_redirect.html</location>
</error-page>

<error-page>
       <exception-type>java.lang.Throwable</exception-type>
       <location>/error_redirect.html</location>
</error-page>

在“error_redirect.html”中,您可以重定向到“/faces/error.xhtml”或其他任何内容。

也许您也可以直接将这些条目指向“/error/”,但由于某种原因(我不记得)我使用了这个重定向 html :)

于 2013-04-06T18:08:13.947 回答