2

サーバー上でいくつかのプロセスを起動して非アクティブにするリンクがあります。その後、このプロセスをバックグラウンドで監視し、終了したらリンクを更新する必要があります。これらのアクションはすべて、AJAXを使用して実行する必要があります。

リンク変換の例:-> ->Bake a cake Baking a cake Load baked cake


onClickこのワークフローはのメソッド内で実行できますがAjaxLink、別のAJAXリクエストをブロックし、処理時間が長くなるとダウンします。

4

1 に答える 1

6

ここでの1つのオプションは、AbstractAjaxTimerBehaviorを使用してサーバーのステータスを定期的にポーリングし、それに応じてラベルを更新することです。

/* Create stopped timer */
AbstractAjaxTimerBehavior timer = new AbstractAjaxTimerBehavior(Duration.seconds(1)) {
    @Override
    protected void onTimer(AjaxRequestTarget target) {
        if (serverIsReady()) {
            /* Stop timer */
            this.stop(target);
            /* Update UI */
            label.setDefaultModel("Load baked cake");
            target.add(label);
        }
    }
});
link.add(timer);
timer.stop();

/* Create triggering event behaviour */
link.add(new AjaxEventBehavior("onclick") {
    @Override
    protected void onEvent(AjaxRequestTarget target) {
        /* Update UI */
        label.setDefaultModel("Baking a cake");
        target.add(label);
        /* Start timer */
        timer.restart(target); /* It seems this method doesn't exist in Wicket 1.4 */
    }
});
于 2012-11-06T08:56:36.810 に答える