1

これが可能かどうかはわかりません。「送信」ボタンをクリックすると、これを行う方法があるようです。

private Button getButton(String id) 
{
    return new AjaxButton(id)
    {
            private static final long serialVersionUID = 1L;
            {
                setEnabled(true);
            }

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) 
            {
                debug = "Beginning a process....";
                target.addComponent(debugLabel);

                //Perform the first process

                debug = "Beginning second process....";
                target.addComponent(debugLabel);

                //Perform the second process

                debug = "Finishing....";
                target.addComponent(debugLabel);

                //Perform the third process

                debug = "Done.";
                target.addComponent(debugLabel);
            }
            @Override
            protected void onError(AjaxRequestTarget target, Form form)
            {
                //NO-OP
            }
        };
    }
}

それが不可能な場合、複数のリアルタイム更新に代わるものはありますか? 一番下にステータス ラベルが表示され、その 1 つのメソッドでどれだけの進捗が行われたかがわかります。

4

2 に答える 2

2

別のスレッドで通知したいプロセスを開始する必要があります。次に、ラベルにバインドされた ajax Behavior によって定期的にチェックされるステータスに関する情報を使用して、ユーザー セッションを更新できます。

ウィケット6では、次も使用できますWebSocketBehavior

于 2012-07-18T20:16:27.113 に答える
1

AjaxTimerBehavior を使用するだけで、1 ~ 2 秒ごとにラベルが更新されます。

コード:

add(new AbstractAjaxTimerBehavior(Duration.seconds(1))
        {
            @Override
            protected void onTimer(AjaxRequestTarget target)
            {
                target.add(label);
            }
        });

明らかに、このソリューションはダム AJAX ポーリングを使用するため、イントラネットまたはその他のトラフィックの少ないサイトでのみ使用することをお勧めします。

于 2012-07-19T09:26:59.470 に答える