Страница пользовательских ошибок Facelets-настройка / перенос сообщения об исключении / трассировки стека
Я использую JBoss AS7.
Я уже знаю, как использовать мои собственные страницы ошибок web.xml для ошибок HTTP (например, 404, 500, ...)- это не проблема.
Но по причинам отладки мне нужно просмотреть ошибку StackTrace. Как я могу получить доступ к сообщению, которое отображается по умолчанию, и вставить его на страницу ошибок?
1 ответ:
Конкретный экземпляр исключения доступен в качестве атрибута запроса с именем, заданным ключом
RequestDispatcher#ERROR_EXCEPTIONкоторая имеет значениеjavax.servlet.error.exception.Таким образом, это даст вам исключение:
#{requestScope['javax.servlet.error.exception']}Однако нет стандартного средства для печати трассировки стека в представлении. Вам нужно было бы создать функцию EL, что-то вроде JSF utility library OmniFaces уже имеет в аромате
#{of:printStackTrace()}. Вы можете увидеть его в действии в OmniFacesFullAjaxExceptionHandlerстраница витрины :<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(); }См. также: