Обработка необработанного исключения в JSF - PullRequest
1 голос
/ 08 июня 2010

Я занимаюсь разработкой структуры обработки исключений. Среда обработки исключений предназначена для приложения JSF.

Проблема, с которой я сталкиваюсь, заключается в отслеживании необработанного исключения и отображении общего сообщения. Я могу обработать необработанное исключение для выполняемого действия (например, по нажатию кнопки), но я не могу перехватить необработанное исключение времени выполнения на уровне инфраструктуры при загрузке страниц JSF или при его инициализации. Любая помощь будет по достоинству оценена.

Спасибо, Прасад

1 Ответ

3 голосов
/ 08 июня 2010

Это зависит от того, как / где вы их ловите. Обычно вы хотите указать <error-page> в web.xml для этого следующим образом:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.html</location>
</error-page>

Это в основном показывает страницу error.html для любого e instanceof java.lang.Exception.

Другой способ - поймать его при прослушивании Filter на url-pattern из /*:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    try {
        chain.doFilter(request, response);
    } catch (Exception e) {
        request.setAttribute("exception", e);
        request.getRequestDispatcher("/error.html").forward(request, response);
    }
}

Это в основном то же самое, у вас есть чуть больше свободы в управлении ответом и выполнении других действий, таких как ведение журнала.

В любом случае, произойдет сбой, когда ответ уже зафиксирован (т. Е. Заголовки уже отправлены клиентской стороне). Затем вы должны были заметить IllegalStateException: response already committed в журналах сервера, и клиенту придется столкнуться с недоделанной (или даже пустой) страницей. Это точка невозврата. Вы хотите выполнить любую бизнес-логику до рендеринга ответа. Это также одна из причин того, что делать бизнес-логику в представлении (JSP / Facelets) считается плохой практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...