Как обработать код ошибки 500 в Richfaces - PullRequest
3 голосов
/ 29 июля 2010

Я использую Richfaces 3.2.2 и мне нужно показать пользователю страницу ошибки 500, когда есть Исключение.Проблема в том, что когда я использую событие ajax, я не могу показать пользователю ошибку 500, когда есть исключение.Я уже определил страницу ошибки на web.xml.

Извините, мой английский.Любое предложение, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 29 июля 2010

Ознакомьтесь с Руководством разработчика по RichFaces , глава 5.10.1.

5.10.1. Обработка ошибок запроса

Для выполнения собственногокод на клиенте в случае ошибки во время Ajax-запроса, необходимо переопределить стандартный метод «A4J.AJAX.onError»:

A4J.AJAX.onError = function(req, status, message){
    window.alert("Custom onError handler "+message);
}

Функция, определенная таким образом, принимает в качестве параметров:

  • req - строка параметров запроса, вызывающего ошибку
  • status - номер ошибки, возвращаемой сервером
  • message - значение по умолчаниюсообщение для данной ошибки

Таким образом, можно создать свой собственный обработчик, который вызывается по таймаутам, внутренним ошибкам сервера и т. д.

Итак, отобразить сгенерированный сервером ответ об ошибке, вам нужно сделать следующее:

A4J.AJAX.onError = function(req, status, message){
    document.open();
    document.write(req.responseText);
    document.close();
}

На перенаправить на страницу ошибки, сделать следующее:

A4J.AJAX.onError = function(req, status, message){
    window.location = 'error.jsf';
}

Вам нужно будет только передать обязательные сведения об ошибке в качестве параметра запроса или позволить серверупорвал его в сеансе, как предложил Оделя.

Смежный вопрос:

2 голосов
/ 29 июля 2010

Поскольку вы используете, вероятно, JSF1.2, а не JSF2, вы можете использовать FaceletViewHandler для обработки исключений.

public class CustomViewHandler extends FaceletViewHandler {
    ...
    @Override
    protected void handleRenderException(FacesContext context, Exception ex) throws IOException, ELException,
        FacesException {
        try {
            ..

            getSessionMap().put("GLOBAL_ERROR", ex);
            getHttpResponseObject().sendRedirect("/error.jsf");
        } catch (IOException e) {
            log.fatal("Couldn't redirect to error page", e);
        }
    }
}

конечно, вам нужно обработать его в bean-компоненте, просто извлеките исключение из сеанса:

Throwable ex = (Exception) getSessionMap().remove("GLOBAL_ERROR");
...