2

ログイン画面へのViewExpiredExceptionリダイレクトによって処理されています。問題は、例外がまだログに記録されていることであり、顧客は例外をなくしたいと強く望んでいますserver.log

この場合、それは疑わしい要件かもしれませんが、それでも実現する必要があります。Mojarra を使用し、JBoss EAP 5.1 にデプロイします

Mojarra を使用してラップすることは明らかにできないため、MyFaces アプローチは役に立ちませんMyFacesServlet

どこにも見つからないため、JBoss JSF ガイドに記載されているアドバイスを適用して Faces サーブレットをラップすることはできませんでしたjsf-integration-deployer-jboss-beans.xml

Ed Burns が提案したアプローチも機能しません。その理由は、JSF2 をターゲットにしているためだとjavax.faces.context.ExceptionHandlerFactory思います。

さらに悪いことに、私は JSF にまったく慣れていないため、詳細なガイダンスに頼らざるを得ず、上記のアプローチを見つけたものの、それらを適用できませんでした。

ありがとうございました

4

2 に答える 2

3

その記事は確かに JSF 2.x を対象としています。JSF 1.x には例外処理機能がありません。

コンテナに任せるのではなく、自分自身をキャッチしてリダイレクトするだけです。フィルターは、これに適した場所です。

try {
    chain.doFilter(request, response);
} catch (ServletException e) {
    if (e.getRootCause() instanceof ViewExpiredException) {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        res.sendRedirect(req.getContextPath() + "/errors/session-expired.jsf");
    } else {
        throw e;
    }
}

web.xmlこれをのサーブレット名にマップしFacesServletて実行します。

于 2011-11-10T16:00:59.783 に答える