gpt4 book ai didi

java - 在 Facelets 页面中显示异常堆栈跟踪

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:28 27 4
gpt4 key购买 nike

我需要在我的 JSF 应用程序 error.xhtml 页面中显示异常堆栈跟踪。我知道用 JSP 页面做这件事是多么简单。但是对于 JSF 2.0,我遇到了一个问题。

在我的 web.xml 中,我定义了一个 JSF 2.0 Facelets 页面作为错误页面:

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/faces/views/error.xhtml</location>
</error-page>

当错误发生时,我被重定向到这个页面。我需要的是在此 Facelets 页面中显示异常的堆栈跟踪。

我尝试使用:

<pre>
<h:outputText value="${exception}"/>
</pre>

但是我没有得到任何输出。我一直在网上搜索,但没有找到解决方案。如何在 Facelets 页面中显示异常堆栈跟踪?

编辑:

我刚试过:

<c:forEach var="exeption" items="${exception.stackTrace}">
<div>${exeption}</div>
</c:forEach>

<h:dataTable value="#{exception.stackTrace}"
var="exception">
<h:column>
<h:outputText value="#{exception}"/>
</h:column>
</h:dataTable>

JSTL 无法正常工作,通过数据表进行交互也无法正常工作。我确信发生了异常,我在我的日志文件中看到了它。

最佳答案

它作为请求属性存在,名称由 RequestDispatcher.ERROR_EXCEPTION 指定。常量。

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

这为您提供了整个 Exception 对象。获取它的堆栈跟踪需要更多的工作。你基本上需要 create a custom EL function它基本上做这样的事情:

public static String printStackTrace(Throwable exception) {
StringWriter stringWriter = new StringWriter();
exception.printStackTrace(new PrintWriter(stringWriter, true));
return stringWriter.toString();
}

以便您可以按如下方式使用它:

<pre>#{my:printStackTrace(requestScope['javax.servlet.error.exception'])}</pre>

JSF 实用程序库 OmniFaces也提供这个。另见 FullAjaxExceptionHandler showcase page .

关于java - 在 Facelets 页面中显示异常堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com