将异常堆栈跟踪显示到Facelets页面 - java

我需要在我的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对象。获取其stacktrace需要更多的工作。您基本上需要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中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…

菱形运算符<>是否等于<?> - java

我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…

JSF:清除会话范围的Bean - java

我想知道,在用户关闭JSF 1.2上的窗口(点击浏览器的“ X”)后,如何在JSF中执行session.remove("userBean")。我当时想在用户点击浏览器的“ X”后弹出一个确认消息,但我不太确定如何访问Ok按钮或将其绑定到我定义的方法上,在这里我有逻辑来清除作用域中的bean。还是有更好的方法呢?任何帮助将不胜感激。谢谢。 …

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

通过Maven编译器插件不会发生有限的包含和排除 - java

我正在使用3.6.0版的maven编译器插件,在此我们只想在特定文件夹中编译一个文件,而在该位置编译所有其他文件。例如:在文件夹应用程序中有14个文件,从那我只希望编译1个文件,但它编译了所有文件,如果我要排除,则它也不起作用。 <sourceDirectory>${basedir}/../src/java</sourceDirectory…