1

例外処理フレームワークを開発しています。例外処理フレームワークは、JSF アプリケーション用です。

私が直面している問題は、キャッチされていない例外を追跡し、一般的なメッセージを表示することです。実行されるアクション (ボタンのクリックなど) のキャッチされない例外を処理することはできますが、JSF ページのロード中または初期化中にフレームワーク レベルでキャッチされないランタイム例外をキャッチすることはできません。どんな助けでも本当に感謝します。

ありがとう、プラサド

4

1 に答える 1

3

それは、どこでどのようにキャッチしているかによって異なります。<error-page>通常、次のようにinを指定しますweb.xml

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.html</location>
</error-page>

これは基本的error.htmlに任意のページを示していますe instanceof java.lang.Exception

別の方法は、 ofのFilterリッスンでキャッチすることです。url-pattern/*

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    try {
        chain.doFilter(request, response);
    } catch (Exception e) {
        request.setAttribute("exception", e);
        request.getRequestDispatcher("/error.html").forward(request, response);
    }
}

これは基本的に同じことを行います。応答を制御したり、ロギングなどの他のことを行う自由度が少しだけ増えます。

いずれにしても、応答がすでにコミットされている (つまり、ヘッダーがクライアント側に既に送信されている) 場合は常に失敗します。その後、サーバー ログで に気付くはずIllegalStateException: response already committedであり、クライアントは中途半端な (または空白の) ページに直面します。これは後戻りできないポイントです。応答をレンダリングする前に、ビジネス ロジックを実行したいと考えています。これは、ビュー (JSP/Facelets) 側でビジネス ロジックを実行することが不適切と見なされる理由の 1 つでもあります。

于 2010-06-08T16:40:59.917 に答える