Wicket - 进度/多标签更新

时间:2012-07-18 20:02:01

标签: java ajax label wicket target

我不确定这是否可行。当你点击“提交”按钮时,似乎有办法做到这一点。

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
            }
        };
    }
}

如果不可能有多种实时更新的替代方案?我想要它,所以底部有一个状态标签更新,并告诉你在这一方法中取得了多少进展。

2 个答案:

答案 0 :(得分:2)

您必须启动要在另一个线程中收到通知的进程。然后,您可以使用有关状态的信息更新用户会话,该状态将由绑定到标签的某些ajax行为定期检查。

在wicket 6中,你也可以使用WebSocketBehavior

答案 1 :(得分:1)

只需使用AjaxTimerBehavior,以便每1-2秒更新一次标签。

代码:

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

显然这个解决方案使用哑巴AJAX轮询,因此建议在内联网或其他低流量站点上使用它。