2009-07-09 21 views
5

Tôi có một servlet mà thực hiện một số kiểm tra lỗi và nếu có điều gì là sai, tôi sẽ thường làm điều này: cách đơn giản nhất để hiển thị httpServletResponse.sendError là gì (403, "Thông điệp của tôi") trạng thái từ JSTL

response.sendError(403, "My message") 
return; 

I không muốn ném ngoại lệ từ servlet - bởi vì tôi muốn tuân thủ các mã trạng thái HTTP.

Trong web.xml Tôi đã cấu hình như sau:

<error-page> 
    <error-code>403</error-code> 
    <location>/failure.jsp</location> 
</error-page> 

Trong failure.jsp Tôi đã tuyên bố sử dụng JSTL và tôi muốn để có được các thông báo lỗi hiển thị. Tôi biết rằng tôi có thể làm như sau trong tập lệnh:

 
<%= request.getAttribute("javax.servlet.error.message") %> 

Nhưng tôi muốn sử dụng JSTL với mệnh đề c: if vì vậy nếu tôi có thể sử dụng tập lệnh, điều này sẽ được đánh giá cao.

Làm cách nào tôi có thể dễ dàng tìm nạp các giá trị từ câu lệnh sendError trong servlet trong trang lỗi bằng cách sử dụng JSTL?

Trả lời

10

Các scriptlet:

<%= request.getAttribute("javax.servlet.error.message") %> 

có thể được dịch sang EL sau:

${requestScope['javax.servlet.error.message']} 

Các cú đúp ký hiệu bean['foo.bar'] là rất hữu ích nếu bạn có dấu chấm trong Map hoặc tên chính scoped, bởi vì bean.foo.bar rõ ràng không trả về giá trị mong muốn Map hoặc phạm vi.

0

Khai báo thẻ JSTL bằng thuộc tính "var", sẽ có đối tượng ngoại lệ (nếu có bất kỳ lỗi nào xảy ra giữa phần thân thẻ) ở cuối thẻ, có thuộc tính stackTrace và thông điệp.

<c:catch var="myException"> 
<%int x=10/0; %> 
</c:catch> 

<c:if test="${myException !=null}"> 
There was an exception: ${myException.message} 
</c:if> 
+1

Điều này sẽ không hoạt động. Trang JSP không bắt bất kỳ ngoại lệ nào - nó được cấu hình như một trang lỗi trong web.xml. Trong trường hợp này ngoại lệ là một thuộc tính trong yêu cầu, nhưng khóa là khá khó xử và tôi không chắc chắn làm thế nào để tham chiếu nó từ JSTL. – tronda

Các vấn đề liên quan