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

Jsf Facelets自定义错误页-自定义/包装异常消息/堆栈跟踪,jsf,exception,facelets,stack-trace,custom-error-pages,Jsf,Exception,Facelets,Stack Trace,Custom Error Pages,我正在使用JBossAS7。 我已经知道如何使用我自己的web.xml错误页面来处理HTTP错误(例如404500…),这不是问题。 但出于调试原因,我需要查看错误堆栈跟踪。如何访问默认显示的消息并将其嵌入错误页面?具体的异常实例作为请求属性提供,其名称为keyed,其值为 因此,这将给您一个例外: #{requestScope['javax.servlet.error.exception']} 但是,没有标准的工具可以在视图中打印堆栈跟踪。您需要这样做,就像在{of:printStackTr

我正在使用JBossAS7。 我已经知道如何使用我自己的
web.xml
错误页面来处理HTTP错误(例如404500…),这不是问题。
但出于调试原因,我需要查看错误堆栈跟踪。如何访问默认显示的消息并将其嵌入错误页面?

具体的异常实例作为请求属性提供,其名称为keyed,其值为

因此,这将给您一个例外:

#{requestScope['javax.servlet.error.exception']}
但是,没有标准的工具可以在视图中打印堆栈跟踪。您需要这样做,就像在
{of:printStackTrace()}
的风格中已经出现的那样。您可以在以下位置看到它的作用:

函数实现如下所示:

另见:

当您说“查看错误堆栈跟踪”时,您的意思是要将其打印到屏幕上吗?这正是我的意思。但不是在控制台上,而是在网页(xhtml)上。您研究过JSF ExceptionHandlerFactory机制吗?到目前为止听起来不错。在尝试此操作时,我发现实际上我的HTTP 500错误自定义页面根本无法工作。就像在这篇文章(1)中一样,只有我的404页有效。是否有关于错误500问题的更新?(1) 你是否已经阅读了我答案中的链接?它描述(并解决)了JSF(ajax)请求中异常处理的许多问题。很棒的文章——我现在就开始工作了。捕捉到错误500,页面包含错误消息。谢谢。
<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();
}