2

私は Wicket 6.10.0 Web アプリケーションを持っています。現在のユーザー セッションの残り時間を表示するタイマーを実装したいと考えています。これをリンクする何か: http://jsfiddle.net/justinobney/uZMGD/

LabelページのフッターにWicketがあります。このラベルは JavaScript を使用して、たとえば 5 分から 0 分 0 秒までの時間をカウントダウンします。このカウントダウン (ラベル) は、リクエストごとに更新する必要があります。

今問題はこれを行う方法ですか?

init()私が追加したメソッドAbstractRequestCycleListenerで、次のようなすべての終了要求を通知します:

  getRequestCycleListeners().add(new AbstractRequestCycleListener() {

     @Override
     public void onEndRequest(RequestCycle cycle) {
        super.onEndRequest(cycle);
        System.out.println("End Request - here i would like to refresh somehow the label");

     }

  });

しかし、このメッセージをラベルに送信して更新する方法がわかりません。何か案は?

*編集:* 私はSPAを持っています:

<body>
lots of AJAX components here
<div wicket:id="footer">Footer always stays here. <br />
Session timeout in: <span wicket:id="sessionTimeoutLabel">countdown here</span>
</div>
</body>

カウントダウンは次のように機能します: http://jsfiddle.net/justinobney/uZMGD/

今、すべてのAJAXリクエストで、sessionTimeoutLabel600秒から0までカウントを開始するためにラベルを再レンダリングする必要があります.

4

1 に答える 1

3

「リクエストの最後」に集中しすぎないでください。これは、レンダリング フェーズの約 10µs 後です。また、セッション タイムアウトはリクエストごとにリセットされるため、セッション タイムアウト パラメータにリセットする以外に、ラベルを新しい値で更新する必要はありません。

構成したセッションタイムアウトを指定するパラメーターをどこかに配置し、それを使用してラベルを表示する必要があります。アプリケーション固有の場合は、Application クラスでゲッターを作成できます。

public MyApplication extends WebApplication {
    public static final int SESSION_TIMEOUT = 30; // minutes

    public int getSessionTimeout() {
        return SESSION_TIMEOUT;
    }
}

そして、フッターにラベルを追加できます:

add(new Label("timeout", PropertyModel.of(this, "application.sessionTimeout")));

または、それがセッションのプロパティである場合は、getter をカスタム セッションに追加できます。

public MySession extends WebSession {
    public static final int SESSION_TIMEOUT = 30; // minutes

    public int getSessionTimeout() {
        return SESSION_TIMEOUT;
    }
}

そして、あなたのラベルでそれを取得します:

add(new Label("timeout", PropertyModel.of(this, "session.sessionTimeout")));

プロパティ モデルの式は、 Component がApplicationゲッターと Sessionのゲッターを持っているという事実を利用しています。

于 2013-10-07T10:16:53.370 に答える