FullAjacExceptionHandler может только ловить javax.el.ELException или java.lang.Throwable. Throwable также имеет приоритет над javax.el.ELException. Мне нужно явно уловить конкретное исключение, созданное управляемым компонентом. Однако ELException, по-видимому, обертывает исключение основной причины (т. Е. LoginFailedException).FullAjaxExceptionhandler только ловит javax.el.ELException или java.lang.Throwable
Я использую JSF 2 (MyFaces 2.1.10), резонатор Spring EL (весенние управляемые бобы), 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 простое пользовательское исключение. Буду признателен за любую помощь. Заранее спасибо.
EDIT: эксперимент сделано:
Я создал 3 страницы ошибок, чтобы увидеть, какой из них будет называться/используется, когда LoginFailedException отбрасывается. Страницы ошибок XHTML содержат точно такой же код, кроме заголовка String, который идентифицирует, что есть. Вот записи об ошибках 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.
Надеюсь, это уточнит мой случай.
UPDATE:
Я теперь с помощью AJAX вызова представить форму (я предполагаю, что это то, что обработчик предназначен для) со всеми страницами обработчиков 3 ошибок активных на web.xml (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.
Пожалуйста, напишите свое функциональное требование и что вы пытаетесь его решить, иначе никто не сможет вам помочь. –
Спасибо @Luiggi .I отредактировал мое сообщение для уточнения. Надеюсь, поможет. На данный момент это всего лишь эксперимент/демонстрация. Мое единственное требование - отобразить пользовательское исключение, созданное управляемым компонентом, с помощью FullAjaxExceptionHandler и соответствующей страницы ошибки. –
Фрагмент кода от OmniFaces предполагает, что он разворачивает исключение, чтобы перейти к первопричине и идентифицирует страницу с ошибкой. Я полагаю, что BalusC может наилучшим образом ответить на это :-) –