0

Mojarra 2.1.3、NetBeans 7.0.1、Primefaces 3.2 を使用しています。

私のアプリケーションには、ViewScoped バッキング Bean によってサポートされている動的な xhtml ページがいくつかあります。各ページには、バッキング Bean からの List<> を表示する p:dataTable があります。この問題は、ユーザーがデータテーブル内の各アイテムの詳細を含む別のページに移動したときに発生します。詳細情報を参照すると、ユーザーはブラウザの戻るボタンを押してリストに戻る可能性が高くなります。そこで、このようなフィルターをアプリケーションに実装しました。

    @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest httpReq = (HttpServletRequest) request;
    HttpServletResponse httpRes = (HttpServletResponse) response;
    if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc) 
        httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
        httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
        httpRes.setDateHeader("Expires", 0); // Proxies. 
    }
    chain.doFilter(request, response);
}

しかし、ここで説明されているように、1 つの問題があります:セッションの有効期限が切れたときにユーザーをタイムアウト ページに移動する方法、ユーザーがブラウザーの戻るボタンをクリックすると、ブラウザーは代わりに完全な新しい HTTP 要求をサーバーに送信する必要があります。

しかし、私の場合はそうではありませんでした。代わりに、ユビキタスな Web ページの有効期限が切れたページが表示されます。これは、私の意見では、ユーザー フレンドリーなエクスペリエンスではありません。私が望むのは、ブラウザのキャッシュからロードするのではなく、サーバーへの新しいリクエストを作成して適切なページを表示することです(Webページに期限切れのページはありません)。出来ますか。

助けてください。どうもありがとう。

4

1 に答える 1

0

これは、ナビゲーションが GET 要求ではなく POST 要求によって行われた場合に発生する可能性があります。

ページ間のナビゲーションが常に GET 要求によって行われるようにする必要があります。例えば

<p:dataTable value="#{bean.items}" var="item">
    <p:column>
        <h:link value="detail" outcome="detail">
            <f:param name="id" value="#{item.id}" />
        </h:link>
    </p:column>
</p:dataTable>
于 2012-07-18T14:19:33.517 に答える