gpt4 book ai didi

java - FullAjaxExceptionhandler 仅捕获 javax.el.E​​LException 或 java.lang.Throwable

转载 作者:行者123 更新时间:2023-12-01 04:49:45 25 4
gpt4 key购买 nike

FullAjacExceptionHandler 只能捕获 javax.el.E​​LException 或 java.lang.Throwable。 Throwable 也优先于 javax.el.E​​LException。我需要显式捕获托管 bean 抛出的特定异常。然而,ELException 显然包装了根本原因异常(即 LoginFailedException)。

我正在使用 JSF 2 (MyFaces 2.1.10)、Spring EL 解析器(Spring 托管 bean)、el-api-2.2 和 glassfish el-impl-2.2。

错误如下:

Ajax request: No
Status code: 500
Exception type: class org.apache.myfaces.view.facelets.el.ContextAwareELException
Exception message: javax.el.ELException: org.tests.omnifaces.exception.LoginFailedException: Login failed.
Stack trace: org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.ELException: org.tests.omnifaces.exception.LoginFailedException: Login failed.
...

LoginFailedException 是一个简单的自定义异常。我将不胜感激任何帮助。提前致谢。

编辑:实验完成:

我创建了 3 个错误页面,以查看抛出 LoginFailedException 时将调用/使用哪一个。 XHTML 错误页面包含完全相同的代码,除了标识哪个是哪个的 header 字符串之外。这是 web.xml 错误条目:

<error-page>
<exception-type>org.tests.omnifaces.exception.LoginFailedException</exception-type>
<location>/pages/errors/loginError.xhtml</location>
</error-page>

<error-page>
<exception-type>javax.el.ELException</exception-type>
<location>/pages/errors/elException.xhtml</location>
</error-page>

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/pages/errors/catchAllThrowable.xhtml</location>
</error-page>

将使用catchAllThrowable.xhtml。如果我删除(在 web.xml 上注释掉) Throwable ,则将使用 ELException.xhtml 。如果我删除 ELException,异常将由容器(tomcat)处理,而不是由 loginError.xhtml 处理。

希望这能澄清我的情况。

更新:

我现在使用 AJAX 调用来提交表单(我想这就是处理程序的用途),web.xml 上的所有 3 个错误处理程序页面均处于 Activity 状态(Throwable、ELException、LoginFailedException):

<h:commandButton id="loginButton" value="Login" action="#{login.loginUser}">
<f:ajax execute="@form" render="@form messages" />
</h:commandButton>

Throwable 已被跳过,并且 ELException 已匹配(呈现 elException.xhtml)。仍然无法将 LoginFailedException 归零。

最佳答案

FullAjaxExceptionHandler 仅解开 FacesException 的根本原因。但是,MyFaces ContextAwareELException 不是 FacesException 的子类,而是 ELException 的子类,因此保持未包装状态。

根据 OmniFaces issue 149FullAjaxExceptionHandler 也得到了改进,可以解包 ELException。该功能自 OmniFaces 1.4 起可用。

关于java - FullAjaxExceptionhandler 仅捕获 javax.el.E​​LException 或 java.lang.Throwable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15192990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com