Страница пользовательских ошибок 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(); }
См. также: