我的问题很简单(问)。如何在 JSF 应用程序中创建和管理我的异常?
首先,我们将普通请求和 Ajax 请求分开。Omnifaces使用FullAjaxExceptionHandler解决了问题。
好的,现在我的 Ajax 异常遵循 JSF/web.xml
路径。下一步是在以下位置创建映射web.xml
:
<error-page>
<exception-type>java.lang.SecurityException</exception-type>
<location>/errors/security.xhtml</location>
</error-page>
那么问题是异常不会匹配上述规则,因为它们已被其他异常类型包装。好的,Omnifaces 再次使用FacesExceptionFilter进行救援。
好的,现在我可以从我的 bean 中抛出异常,例如
@PostConstruct
public void init() {
throw new SecurityException("Go away!");
}
不幸的是,这不起作用,因为 Exception 在 bean 初始化期间抛出,而不是在调用方法时抛出。
Omnifacesunwrap
方法将停止到 a 的发生,FacesException
并且 CDI (Weld) 将在Bean
初始化期间将任何异常包装到 FacesException (我假设它符合规范)。
我可以编写自己的 Exception 过滤器,它不会停止展开 a FacesException
,您很快就会意识到您可能会比人们想要的更深入地了解堆栈跟踪。
如何在Bean
初始化期间管理异常?