2010-12-14 45 views
8

Tôi đã tạo xử lý ngoại lệ trong ứng dụng Mùa xuân của mình bằng cách sử dụng Spring SimpleMappingExceptionResolver. Mọi thứ đều hoạt động tốt. Bây giờ tôi cần bằng cách nào đó in ngoại lệ bị bắt trong trang jsp. Một cái gì đó giống như tin nhắn và ngăn xếp dấu vết. Trong jsp của tôi, tôi đã tìm thấy đối tượng ngoại lệ trong thuộc tính "exception". Tất cả những gì tôi cần làm là một cái gì đó như thế:Trang Lỗi - cách in dấu vết ngăn xếp trong JSP

${exception.printStackTrace()} 

Nhưng tôi không biết làm thế nào. Có cách nào làm thế nào để làm điều đó? :-)

Cám ơn bất cứ đề nghị,

Mateo

+1

Bạn không thể tìm thấy API cho tên của phương pháp? http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Throwable.html#printStackTrace(). Các câu hỏi phải luôn liệt kê loại lỗi bạn đang gặp phải. Ngay cả khi nó được, dòng đó không sản xuất bất cứ điều gì –

+0

@Juan tôi tin @mateo có nghĩa là anh ta không thể tìm thấy cách để inStackTrace() vào nội dung trang, rất khó để sao chép chính xác mà không có mã nội tuyến (eew) để thiết lập lên một PrintWriter xung quanh một StringWriter. –

Trả lời

17

Giải pháp đơn giản nhất tôi có thể nghĩ là để lặp qua các yếu tố vết đống, lợi dụng việc Throwable.getStackTrace() phương pháp:

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

Bạn cần thêm một số định dạng, tất nhiên.

+1

+1. Nhưng một trong những thực sự không nên in stacktraces trong một JSP. Người dùng yêu thích stacktraces;) – Bozho

+0

@Bozho: Aye. Tôi cho rằng đây là mục đích chẩn đoán, nhưng tôi chỉ sử dụng trang lỗi mặc định của Tomcat. Ê này. – skaffman

+1

Có tôi sử dụng chính xác cho mục đích chẩn đoán, tôi không có quyền truy cập vào nhật ký Tomcat và tôi đã tùy chỉnh trang này. Vì vậy, tôi nghĩ rằng điều này sẽ dễ hơn là sử dụng trang lỗi mặc định Tomcat một lần nữa :-) Nhưng dù sao, cảm ơn ... – mateo

2

Phải làm điều này (chỉ dành cho môi trường địa phương/dev) trong các trang trong quá khứ và chỉ muốn hiển thị nó trong một vùng văn bản hoặc một khối được định dạng sẵn. Đầu ra từ skaffman in ra từng phần tử dấu vết strack nhưng không phải là thông báo và lớp ngoại lệ.

Nếu bạn muốn nó được định dạng trước theo printStackTrace() hãy xem xét sử dụng Spring EL và commons-lang3.

<spring:eval expression="T(org.apache.commons.lang3.exception.ExceptionUtils).getStackTrace(exception)"/> 
Các vấn đề liên quan