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