Я уже искал здесь и в Интернете, но не смог найти решение проблемы.Struts2 customExceptionMappingInterceptor
Я хотел бы использовать свой собственный обработчик исключений, чтобы перехватить все исключения Java и обработать их определенным образом (я задаю конкретный статус для ответа, а затем в общей ошибке Ajax: вызов будет обработан и Диалог JS будет создан с определенным сообщением).
Так что я создал мое действие:
public class DefaultExceptionHandlerAction extends ExceptionMappingInterceptor {
/** The class logger. */
private static final Logger LOGGER = Logger.getLogger(DefaultExceptionHandlerAction.class);
@Override
protected void publishException(ActionInvocation invocation, ExceptionHolder exceptionHolder) {
LOGGER.error("Global Exception msg: "+ exceptionHolder.getException().getMessage(), exceptionHolder.getException());
String message = "error msg for client";
HttpServletResponse response = ServletActionContext.getResponse();
response.reset();
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
PrintWriter out = null;
try {
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
out.print(message);
} catch (IOException ioe) {
LOGGER.error("IOException in printMessage : " + ioe.getMessage(), ioe);
} finally {
if (out != null) {
out.flush();
out.close();
}
}
}
}
Кроме этого, в моем struts.xml у меня есть:
<interceptor name="exception" class="com.travelsoft.orchestra.b2b.configuration.DefaultExceptionHandlerAction" />
<interceptor-stack name="securedStack">
<interceptor-ref name="exception" />
<interceptor-ref name="defaultStack" />
<interceptor-ref name="i18n" />
<interceptor-ref name="login" />
</interceptor-stack>
<global-results>
<result name="exception">/defaultExceptionHandler.action</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception" />
</global-exception-mappings>
В одном конкретном действии, я вынужден исключения нулевого указателя непосредственно в коде. Конечно, это действие использует перехватчик securedStack
.
Когда это действие выполнено, у меня есть неопределенный цикл.
JavaScript:
error : function(jqXHR, textStatus, errorThrown) {
// all other errors
var contentDialog = $("<div/>",{ "id":"contentDialog"});
contentDialog.html(jqXHR.responseText);
contentDialog.dialog({
title : 'Erreur',
modal : true,
zIndex: 8888,
resizable: false,
close: function(event, ui) {
$(this).dialog("destroy").remove();
},
buttons:{"OK": function() {
$(this).dialog("close");}}
});
},...
undertermined является опечатка для untermined (бесконечная)? –