Страница пользовательских ошибок Facelets-настройка / перенос сообщения об исключении / трассировки стека


Я использую JBoss AS7. Я уже знаю, как использовать мои собственные страницы ошибок web.xml для ошибок HTTP (например, 404, 500, ...)- это не проблема. Но по причинам отладки мне нужно просмотреть ошибку StackTrace. Как я могу получить доступ к сообщению, которое отображается по умолчанию, и вставить его на страницу ошибок?

1 2

1 ответ:

Конкретный экземпляр исключения доступен в качестве атрибута запроса с именем, заданным ключом RequestDispatcher#ERROR_EXCEPTION которая имеет значение javax.servlet.error.exception.

Таким образом, это даст вам исключение:

#{requestScope['javax.servlet.error.exception']}

Однако нет стандартного средства для печати трассировки стека в представлении. Вам нужно было бы создать функцию EL, что-то вроде JSF utility library OmniFaces уже имеет в аромате #{of:printStackTrace()}. Вы можете увидеть его в действии в OmniFaces FullAjaxExceptionHandler страница витрины :

<ui:composition ... xmlns:of="http://omnifaces.org/functions">
...
<li>Stack trace: <pre><code>#{of:printStackTrace(requestScope['javax.servlet.error.exception'])}</code></pre></li>

При этом реализация функции выглядит следующим образом:

/**
 * Print the stack trace of the given exception.
 * @param exception The exception to print the stack trace for.
 * @return The printed stack trace.
 */
public static String printStackTrace(Throwable exception) {
    if (exception == null) {
        return null;
    }

    StringWriter stringWriter = new StringWriter();
    exception.printStackTrace(new PrintWriter(stringWriter, true));
    return stringWriter.toString();
}

См. также: