У меня есть приложение Struts 2, где исключения обрабатываются стандартным способом: у нас есть исключительная JSP для ошибок на стороне сервера, и она подключена соответствующим образом.Обратите внимание, что в него входят переменные Message / StackTrace as Struts.
исключение. JSP
<html>
<head>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
<div>
<label>Error Description</label>
<s:actionerror />
<div>
<strong><s:property value="%{exception.message}" /></strong>
<br/>Stack Trace:<br/>
<s:property value="%{exceptionStack}" />
</div>
</body>
struts.xml
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception" />
<exception-mapping exception="java.lang.RuntimeException" result="exception" />
</global-exception-mappings>
<global-results>
<result name="exception">/WEB-INF/jsp/admin/exception.jsp</result>
</global-results>
Это прекрасно работает для сгенерированных ошибок на стороне сервера (например, из действий, возвращающих JSP), но у нас также есть запросы AJAX в приложении.
В действии, инициированном AJAX, даже если я выбрасываюИсключение, исключительная JSP не обрабатывается.Вместо этого я получаю ответ AJAX, который содержит мой JSP-исключение в виде textStatus.responseText
:
$.ajax({
url: ...,
dataType: "json",
type: "post",
data: params,
success: function (data){
...
},
error: function (textStatus, errorThrown) {
// textStatus.responseText has my Exception JSP
}
});
Вопрос: Как перенаправить на исключительную ситуацию Struts JSP ( с правильным сообщением и трассировкой стека, как указано в переменных Struts ) для отображения стандартной страницы ошибки после ошибки AJAX?
Я знаю, что могу перенаправить с помощью window.location.href
в стандартную универсальную JSP, но я потеряю местозаполнители Message / StackTrace.Как будто мне нужно заново обработать в Struts или заменить эти переменные.