我使用JSF与JPA。我的错误处理是由一个全局异常处理程序完成的,如果发生任何错误,它将被触发。在这个处理程序中,我只执行重定向到error.xhtml。
除了JPA处理程序之外,这工作得很好。如果@EJB jpa处理程序产生错误,在我的情况下,我将其作为EJB异常。在这种情况下,jsf重定向不起作用。
FacesContext.getCurrentInstance().getExternalContext().redirect("/error/");
但是我没有得到任何错误信息。我认为这与一些生命周期问题有关,但我不知道如何解决它。我只是想实现jpa和jsf的全局错误处理,它将始终在一个特定的错误页面结束:(
是否使用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:)