2011-05-05 65 views
3

我試圖打印出jsp頁面上的異常堆棧跟蹤。但是,隱式的異常對象似乎沒有被填充。無法捕獲異常頁面上的異常

<div xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
xmlns:spring="http://www.springframework.org/tags" 
xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> 
<jsp:output omit-xml-declaration="yes"/> 
<jsp:directive.page isErrorPage="true" /> 
<spring:message var="title" code="error_uncaughtexception_title"/> 

    <h2>${fn:escapeXml(title)}</h2> 

    <p> 
     <spring:message code="error_uncaughtexception_problemdescription"/> 
    </p> 
    <c:if test="${not empty exception}"> 
     <p> 
      <h4> 
       <spring:message code="exception_details"/> 
      </h4> 
      <spring:message var="message" code="exception_message"/> 

       <c:out value="${exception.localizedMessage}"/> 

      <spring:message var="stacktrace" code="exception_stacktrace"/> 

       <c:forEach items="${exception.stackTrace}" var="trace"> 
        <c:out value="${trace}"/> 
        <br/> 
       </c:forEach> 

     </p> 
</c:if> 

頁在web.xml配置是否正確:

<error-page> 
     <exception-type>java.lang.Exception</exception-type> 
     <location>/uncaughtException</location> 
    </error-page> 

任何猜測到我缺少什麼嗎?

回答

5

exception隱式對象可作爲頁面變量(即scriptlet)使用,但不可用作EL引用。

可以使用${pageContext.errorData}表達(參見docs),這是javax.servlet.jsp.ErrorData類型(見javadoc)的目的訪問異常狀態。

查看J2EE tutorial舉例。

+1

非常感謝有趣的是,我從Spring Roo項目中提取了該代碼。看起來他們犯了同樣的錯誤。 – 2011-05-05 19:25:30

+0

我剛剛嘗試了修改一個Roo生成的異常頁面,發現了同樣的問題。事實證明Roo使用[SimpleMappingExceptionResolver](http://static.springsource.org/spring/docs/3.0.5.RELEASE/javadoc-api/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.html)來獲得「異常「映射到這些視圖。 – 2011-10-12 16:42:53