2012-05-08 4 views
4

Я пробовал AjaxExceptionHandler of omniFaces (что очень полезно) и настроил его, чтобы поймать java.lang.Throwable и исключение, вызванное всеми типами запросов (а не только аякс-запросов).Как обращаться с javax.el.PropertyNotFoundException с настраиваемым обработчиком исключений

Он отлично работает, однако он не поймает javax.el.PropertyNotFoundException, когда разработчик ошибся в выражении EL.

Итак, вопрос в том, как обращаться javax.el.PropertyNotFoundException с ExceptionHandlerFactory механизм JSF2?

ответ

2

FullAjaxExceptionHandler должен быть в состоянии справиться с этим. Ваша конкретная проблема, вероятно, вызвана тем, что у вас есть относительно большая страница, которая переполняет размер буфера по умолчанию Facelets размером 2 КБ, и, таким образом, ответ уже совершен в точке, где было выбрано исключение. Когда ответ завершен, часть ответа уже отправлена ​​на клиентскую сторону. Существует , а не, чтобы вернуть уже отправленные байты и представить новый ответ со страницей ошибок. У вас была бы такая же проблема, если не использовать ajax. Вместо этого исключение будет регистрироваться, и клиент застрянет с помощью полуобработанной страницы.

Возможно, вы захотите увеличить размер буфера ответа по умолчанию до размера вашего наибольшего ответа HTML. Таким образом, ответ будет сгенерирован и полностью буферизирован в памяти сервера до того, как первый байт будет отправлен на клиентскую сторону. Вы можете установить его в параметре контекста javax.faces.FACELETS_BUFFER_SIZE в web.xml с размером буфера в байтах как значение. Следующий пример устанавливает его в 64 КБ.

<context-param> 
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name> 
    <param-value>65535</param-value>  
</context-param> 

Вы можете установить это в среде разработки/тестирования только так, что любые ошибки в стороне зрения могут быть замечены и живая среда может продолжать использовать размер буфера по умолчанию для сохранения памяти сервера.

+0

Как ни странно, я вижу исключение в журнале сервера, прежде чем запускает обработчик исключений. За другими исключениями этого не происходит. Поэтому я вижу «PropertyNotFoundException» дважды, один раз перед обработчиком исключений, а затем обработчик исключений регистрирует его с помощью этой строки 'context.getExternalContext(). Log (String.format (LOG_EXCEPTION_OCCURRED, errorPageLocation), исключение);' Также я не знаю, t см. страницу с половиной выпечки, я просто получаю фон приложения без меню (но загружаются все ресурсы JSF (* .css, * .js)). Полезно ли упомянуть, что это происходит с MyFaces и IBM WAS8? – jonnie119

+0

Это ** ** ** страница с полминутой. Rightclick и * View Source * в браузере. Полученный ответ HTML является неполным, поскольку он был прерван из-за этого исключения. – BalusC

+0

Я развернул тестовое приложение на JBoss и переключился между Mojarra и MyFaces; оба отлично работали, и обработчик исключений справился с этим отлично! Однако увеличение размера буфера не помогло в Websphere AS. Таким образом, эта проблема скорее является настройкой в ​​нашем приложении или общей настройкой в ​​WAS8, я еще не знаю. Я отправлю дальнейшие выводы – jonnie119