我有一个链接应该在服务器上触发一些进程并进入非活动状态,然后它应该在后台监视这个进程,当它完成时,应该更新链接。所有这些操作都应该在 AJAX 的帮助下完成。
链接转换示例:-> ->Bake a cake
Baking a cake
Load baked cake
这个工作流程可以在 的onClick
方法中完成AjaxLink
,但它会阻塞另一个 AJAX 请求,并且会在较长的处理时间上下降。
我有一个链接应该在服务器上触发一些进程并进入非活动状态,然后它应该在后台监视这个进程,当它完成时,应该更新链接。所有这些操作都应该在 AJAX 的帮助下完成。
链接转换示例:-> ->Bake a cake
Baking a cake
Load baked cake
这个工作流程可以在 的onClick
方法中完成AjaxLink
,但它会阻塞另一个 AJAX 请求,并且会在较长的处理时间上下降。
这里的一种选择是使用 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 */
}
});