例外処理フレームワークを開発しています。例外処理フレームワークは、JSF アプリケーション用です。
私が直面している問題は、キャッチされていない例外を追跡し、一般的なメッセージを表示することです。実行されるアクション (ボタンのクリックなど) のキャッチされない例外を処理することはできますが、JSF ページのロード中または初期化中にフレームワーク レベルでキャッチされないランタイム例外をキャッチすることはできません。どんな助けでも本当に感謝します。
ありがとう、プラサド
例外処理フレームワークを開発しています。例外処理フレームワークは、JSF アプリケーション用です。
私が直面している問題は、キャッチされていない例外を追跡し、一般的なメッセージを表示することです。実行されるアクション (ボタンのクリックなど) のキャッチされない例外を処理することはできますが、JSF ページのロード中または初期化中にフレームワーク レベルでキャッチされないランタイム例外をキャッチすることはできません。どんな助けでも本当に感謝します。
ありがとう、プラサド
それは、どこでどのようにキャッチしているかによって異なります。<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 つでもあります。