Wicket 1.4使用AJAX定期更新组件状态

时间:2012-11-05 20:14:45

标签: wicket

我有一个链接应该在服务器上激活一些进程并且不活动,然后它应该在后台监视这个进程,当它完成时,应该更新链接。所有这些操作都应该在AJAX的帮助下完成。

链接转换示例:Bake a cake - > Baking a cake - > Load baked cake


此工作流程可以在onClick的{​​{1}}方法内完成,但它会阻止其他AJAX请求,并且会在较长的处理时间内停止。

1 个答案:

答案 0 :(得分:6)

此处的一个选项是使用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 */
    }
});