3

Richfaces 3.2.2を使用しており、例外が発生したときにユーザーに500エラーページを表示する必要があります。問題は、ajaxイベントを使用すると、例外が発生したときに500エラーをユーザーに表示できないことです。web.xmlでエラーページをすでに定義しました。

すみません、私の英語。何か提案がありますか?

4

2 に答える 2

4

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-エラーを呼び出すリクエストのparams文字列
  • 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';
}

Odelyaが提案したように、必須のエラーの詳細をリクエストパラメータとして渡すか、サーバー側にセッションに保存させるだけで済みます。

関連する質問:

于 2010-07-29T18:12:17.167 に答える
2

おそらくJSF2ではなくJSF1.2を使用しているので、を使用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");
于 2010-07-29T15:11:40.790 に答える