2

他のJSFページへのリンクがあるJSFページがあります。リンクをクリックすると、セッションがすでに期限切れになっている場合、制御はログインページに移動します。そして、ユーザー名パスワードでログインし、リンクをクリックしたのと同じページに再びアクセスします。リンクをクリックすると、空白のページが表示されます。F5でページを更新すると、期待されるページが読み込まれます。

また、JBossサーバーのコンソールを確認しましたが、ViewExpired例外が表示されません。

したがって、空白のページが表示されないようにするために、これをどのように処理するかについて少し混乱しています。

助けてください。

4

2 に答える 2

2

これは、ajax によるリンク ナビゲーションを実行していて、ログイン後に返されたページがブラウザー キャッシュから提供された場合に発生する可能性があります (そのため、古いビュー ステート ID を持つフォームが含まれています)。制限されたページをキャッシュしないようにブラウザに指示する必要があります。これは、次のフィルターで実現できます。

@WebFilter(servletNames={"Faces Servlet"})
public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
            res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            res.setDateHeader("Expires", 0); // Proxies.
        }

        chain.doFilter(request, response);
    }

    // ...
}

したがって、この問題は、ページ間のナビゲーションに (ajax) コマンド リンクを使用していることも示唆していることに注意してください。これは悪い習慣です。これらのリンクは、SEO フレンドリーでもブックマーク可能でもありません。コマンド リンクは、フォームの送信にのみ使用する必要があります。ページ間のナビゲーションには通常のリンクを使用します。h:commandLink の代わりに h:outputLink を使用する必要がある場合も参照してください。

于 2012-11-21T11:41:03.623 に答える