Omnifaces FullAjaxExceptionHandler и диалоговое окно PrimeFaces

Я использую FullAjaxExeptionHandler из библиотеки omnifaces, и все работает хорошо, однако я не уверен, как показать исключение в диалоговом окне PrimeFaces на странице, где произошло исключение. В настоящее время я могу перенаправить пользователя только на страницу исключений, как описано на витрине omnifaces.

Что у меня есть сейчас:

<error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/errorpages/bug.xhtml</location>
</error-page>

Что я хочу:

<error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/currentpage.xhtml?showExceptionDialog(exception)</location>
</error-page>

Спасибо.


person miro    schedule 09.10.2013    source источник


Ответы (1)


FullAjaxExceptionHandler не поддерживает это. FullAjaxExceptionHandler предназначен для достижения точно такого же поведения, как если бы это был запрос без ajax. т.е. используйте web.xml указанных <error-page> записей в соответствии со стандартным API сервлетов.

Кроме того, OmniFaces не предназначен в качестве расширения для конкретных PrimeFaces, поэтому невозможно использовать какие-либо специфичные для PrimeFaces API, такие как RequestContext или «диалоговая структура» 4.0 в FullAjaxExceptionHandler. Это сделало бы его непригодным для использования в проектах, где используется не PrimeFaces, а другая библиотека компонентов.

Лучше всего действительно создать собственный обработчик исключений. Вы можете полностью свободно использовать части исходного кода FullAjaxExceptionHandler, если вы соблюдаете лицензию Apache. Альтернативой может быть запрос PrimeFaces Extensions для создания и добавления обработчика исключений, который вы имели в виду, к его стандарту. задавать.

person BalusC    schedule 10.10.2013
comment
Да, я создал свой собственный обработчик исключений на основе вашего кода. Я думаю, что моя проблема в том, что метод handle() обработчика исключений выполняется в фазе REQUEST_RESPONSE, и слишком поздно вызывать какой-либо javascript. Как я могу сказать JSF из этого обработчика исключений, что я хочу выполнить какой-то javascript и заставить его отобразить его? - person miro; 11.10.2013
comment
Сделайте то же, что и FullAjaxExceptionHandler: сбросьте ответ, если он еще не зафиксирован. - person BalusC; 11.10.2013
comment
Я уже пробовал это, но, возможно, я делал что-то не так, так как я новичок в жизненном цикле JSF. Я попробую еще раз. Спасибо. - person miro; 11.10.2013