Facelets自定义错误页面 - 自定义/包装异常消息/堆栈跟踪

时间:2013-11-22 16:02:46

标签: jsf exception facelets stack-trace custom-error-pages

我正在使用JBoss AS7。 我已经知道如何使用我自己的web.xml错误页面来解决HTTP错误(例如404,500,...) - 这不是问题。 但出于调试原因,我需要查看错误StackTrace。如何访问默认显示的消息并将其嵌入错误页面?

1 个答案:

答案 0 :(得分:2)

具体的异常实例可用作请求属性,其名称由RequestDispatcher#ERROR_EXCEPTION键入,其值为javax.servlet.error.exception

因此,这将给你例外:

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

但是,没有标准工具可以在视图中打印其堆栈跟踪。您需要homebrew an EL function,类似于JSF utility library OmniFaces已经具有#{of:printStackTrace()}的风格。您可以在OmniFaces FullAjaxExceptionHandler showcase page

中看到它的实际效果
<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();
}

另见: