Java 如何在jspx中循环通过异常原因链
我有一个JSPX(X!)页面,我想在其中显示一个异常(消息和stacktrace),所有这些都会导致异常。打印第一个异常没有问题,但我还没有找到一种方法来“交互”所有原因异常 当然,我可以这样做:Java 如何在jspx中循环通过异常原因链,java,jsp,jstl,jspx,Java,Jsp,Jstl,Jspx,我有一个JSPX(X!)页面,我想在其中显示一个异常(消息和stacktrace),所有这些都会导致异常。打印第一个异常没有问题,但我还没有找到一种方法来“交互”所有原因异常 当然,我可以这样做: <c:out value="${exception.message}" /> <c:out value="${exception.stacktrace}" /> <c:if test=${exception.cause not null}> <c:se
<c:out value="${exception.message}" />
<c:out value="${exception.stacktrace}" />
<c:if test=${exception.cause not null}>
<c:set var="cause1" "${exception.cause}" />
<c:out value="${cause1.message}" />
<c:out value="${cause1.stacktrace}" />
<c:if test=${cause1.cause not null}>
<c:set var="cause2" "${cause1.cause}" />
<c:out value="${cause2.message}" />
<c:out value="${cause2.stacktrace}" />
<c:if test=${cause2.cause not null}>
<c:set var="cause3" "${cause2.cause}" />
<c:out value="${cause3.message}" />
<c:out value="${cause3.stacktrace}" />
</c:if>
</c:if>
</c:if>
但这是丑陋的,如果原因超过3个,就会失败
所以我的问题是,如何在jspx中为这种场景构建while
循环
(请不要讨论打印异常是错误的。)在使用JSTL标记进行循环时,无法表达任意的
,因此必须使用scriptlet。注意,您可以将JSPX中的scriptlet用作
元素
或者,您可以在servlet(控制器等)中准备所需的stacktrace表示。也许这是一种更好的方法。在使用JSTL标记进行循环时,无法表达任意的,因此必须使用scriptlet。注意,您可以将JSPX中的scriptlet用作
元素
或者,您可以在servlet(控制器等)中准备所需的stacktrace表示。也许这是一个更好的方法。一个快速的解决方案可能是首先构建一个异常列表,然后使用c:forEach
对其进行迭代
或者,您可以尝试递归地包含jsp并将原因作为参数传递。大概是这样的:
<!-- Exception.jspx -->
<c:out value="${exception.message}" />
<c:out value="${exception.stacktrace}" />
<c:if test=${exception.cause not null}>
<c:set var="exception" value="${exception.scope}"/>
<c:import url="Exception.jspx/>
</c:if>
一个快速的解决方案可能是首先构建一个异常列表,然后使用c:forEach
对其进行迭代
或者,您可以尝试递归地包含jsp并将原因作为参数传递。大概是这样的:
<!-- Exception.jspx -->
<c:out value="${exception.message}" />
<c:out value="${exception.stacktrace}" />
<c:if test=${exception.cause not null}>
<c:set var="exception" value="${exception.scope}"/>
<c:import url="Exception.jspx/>
</c:if>
一种解决方法是使用贯穿整个原因链的foreach
。
foreach
中的运行次数会限制可以显示的异常数量。
不是很优雅,但既没有while
也没有break
这可能是最“灵活”的方式
一种解决方法是使用贯穿整个原因链的foreach
。
foreach
中的运行次数会限制可以显示的异常数量。
不是很优雅,但既没有while
也没有break
这可能是最“灵活”的方式
您可以递归地使用
下面是/WEB-INF/printexception.jsp
的唯一主体的外观:
在您的主要错误页面中引用它,如下所示:
请记住,堆栈级别通常“只有”~1000深,希望不会得到那么深的嵌套异常:)您可以递归地使用
下面是/WEB-INF/printexception.jsp
的唯一主体的外观:
在您的主要错误页面中引用它,如下所示:
请记住,堆栈级别通常“只有”1000深,希望您不会得到那么深的嵌套异常:)使用JSTL 1.1+
${exception}
使用JSTL 1.1+
${exception}
什么是jspx
?我可以知道吗?以前从未见过它。它与jsp相关,比如HtmlX到Html。或者更准确地说,它是格式良好的(在xml的therms中)jsp。什么是jspx
?我可以知道吗?以前从未见过它。它与jsp相关,比如HtmlX到Html。或者更准确地说,它是格式良好(在xml的therms中)的jsp(欢迎使用堆栈溢出),--我的问题不是stacktrace,而是异常(exception.cause)的原因,因为原因不是列表或数组。相反,您必须调用e.getCause().getCause().getCause()…
(欢迎使用堆栈溢出),--我的问题不是堆栈跟踪,而是异常(exception.cause)的原因,因为原因不是列表或数组。相反,您必须调用e.getCause().getCause().getCause()…
。