3

Wicket 1.5.8 を使用して、特定のページの以前のバージョンをすべて期限切れにしようとしています。改札 1.4 では、 によって行われましたgetPage().getPageMap().clear()。現在 wicket 1.5 では、ページ マップがなくなっており、ドットの付け方がわかりません。

私の使用例は、エンティティを作成/編集するためのウィザード (http://www.wicket-library.com/wicket-examples/wizard/) があることです。ウィザードが送信されると、ユーザーはエンティティ リストにリダイレクトされます。この時点で、ユーザーがブラウザーの [戻る] ボタンを使用して元の状態のウィザードに戻ることができないようにしたいため、ウィザードを使用して以前のバージョンのページを期限切れにしたい (私はgetPageSettings().setRecreateMountedPagesAfterExpiry(true);そのように使用していますユーザーが戻ったときにページの有効期限が切れると、マウントされたページは空白の状態で再作成されます。これは私が望んでいることです)。

周りを見回すと、セッションからすべてのページを削除する可能性が見つかりましたSession.get().clear();(1.4バージョンがすべてのページを削除していたのか、PageMapへのアクセスに使用されたページのすべてのバージョンだけを削除していたのかわかりません-マルチタブにはこれが適していますサポート)。ただし、最後のページの有効期限が切れていないため、これを使用しても部分的にしか機能しません。

ウィザードが にマウントされ、最後に/wizardにリダイレクトすると仮定すると、フローは、、、/listのようになります。戻るボタンを使用すると、有効期限が切れていませんが、期待どおりです。セッションのクリアとリスト ページへの送信は、次のようなウィザードのメソッドで行われます。/wizard?1/wizard?2/wizard?3/list/wizard?3/wizard?1/wizard?2onFinish

@Override
public void onFinish() {
  Session.get().clear();
  Session.get().getFeedbackMessages().add(new FeedbackMessage(..));
  setResponsePage(ListPage.class);
}

それで、質問自体に来てください:期待される動作、つまり期限切れを得る方法を知っている人は/wizard?3いますか?

ありがとう

注:ListPageブックマーク可能なページであり、私も試してみましたsetResponsePage(new ListPage());


アンドレアの提案に基づいて、私が最終的に行ったことで更新します

私のアプリケーションは、ウィケットのSession;を拡張するカスタム セッション オブジェクトを使用することに注意してください。と呼びましょうAppSession

  1. AppSessionboolean clearRequested属性を追加しました (デフォルトは false)
  2. に、セッションでclearRequestedを true に設定するための単なるショートカットであるAppSessionstatic void メソッドを追加しましたrequestClear()
  3. ウィザードので、 を呼び出すonFinish()直前にsetResponsePageを呼び出しますAppSession.requestClear()
  4. 最後にRequestCycleListener、アプリケーションに a を追加します。

    getRequestCycleListeners.add(new AbstractRequestCycleListener() {
      @Override
      public void onBeginRequest(RequestCycle cycle) {
        super.onBeginRequest(cycle);
        AppSession session = AppSesssion.get();
        if (session.isClearRequested()) {
          session.clear();
          session.setClearRequested(false);
        }
      }
    });
    

ページを期限切れにするためにアクションの後にセッションをクリアする必要があるときはいつでもAppSession.requestClear()、次のリクエストでセッションがクリアされます。

4

1 に答える 1

1

ListPage でセッションをクリアできます。このページはブックマーク可能であるため、ListPage がセッション中のページを削除する必要があることを示すページ パラメータを渡すことができます。

于 2012-10-09T14:40:19.120 に答える