Как обрабатывать исключения, возникающие в пользовательском результате AJAX Struts 2?

Я использую пользовательский результат Struts 2, который используется с запросом AJAX.

Когда он выдает исключение, я получаю в ответ «Отчет о проблемах Struts» в формате html. Это не очень полезно. Как я могу разумно обработать такое исключение — либо вызвать соответствующую функцию javascript errorResponse, либо перевести пользователя на другую страницу?

public class MyResult implements Result {

    @Override
    public void execute(ActionInvocation invocation) {

        if (invocation.getStack().findValue("data") == null) {
            throw MyException("Data is bad.");
        }

        PrintWriter responseStream =
            ServletActionContext.getResponse().getWriter();
        responseStream.println("Data is good.");
        responseStream.close();
    }
}

person Victor Lyuboslavsky    schedule 04.03.2012    source источник


Ответы (1)


Либо объявите результат обработки исключений, либо отправьте обратно что-нибудь полезное.

person Dave Newton    schedule 04.03.2012
comment
Это запрос AJAX, поэтому страница не будет перезагружена. Какой результат обработки исключений я могу определить, чтобы предоставить пользователю полезную информацию? - person Victor Lyuboslavsky; 06.03.2012
comment
@Victorb Информация об исключении может быть сериализована в JSON, вы можете устанавливать HTTP-коды и т. д. и действовать в соответствии с ними в обратном вызове JavaScript. - person Dave Newton; 06.03.2012
comment
Верно. Так что возня с конфигурациями обработки исключений Struts здесь не слишком поможет, если только у меня не будет собственного результата обработки исключений. Лучший способ — отправить обратно что-то полезное, например пользовательскую ошибку или сериализованное исключение JSON. - person Victor Lyuboslavsky; 07.03.2012
comment
@Victorb Это не совсем обычно, но ладно. Обычно вы не хотите просто передавать обратно фрагмент текста, вы будете передавать обратно либо HTML, либо JSON и, возможно, код ошибки HTTP, в зависимости от того, как вы хотите, чтобы клиентская сторона справлялась с вещами. В любом случае, это может быть обработано довольно общим образом как на стороне сервера, так и на стороне клиента. - person Dave Newton; 07.03.2012