基于这个SO question,我了解到 Wicket 将后续的 AJAX 请求排队。现在我的页面充满了几个 AJAX 请求,我想再添加一个会产生冗长操作的请求。
public void populateItem(final Item item) {
final MyObject object = (MyObject) item.getModelObject();
// ... a couple of fields
Label statusLabel = new Label("status", new AbstractReadOnlyModel() {
@Override
public Object getObject() {
return someService.doSomeLengthyOperation();
}
});
statusLabel.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)));
item.add(statusLabel)
}
一旦这个 Ajax 请求触发,它可能需要一分钟才能完成执行。这里的问题是我someService.doSomeLengthyOperation()
将执行n times the number of rows
,这意味着我将排队n times two-minutes
。现在,正如我所提到的,Wicket 将后续的 AJAX 请求排队。
发生的事情是我number-of-rows * minutes-it-take-to-finish-the-operation
需要加载页面或执行其他需要 AJAX 的操作,例如
new AjaxButton("ajax-button"){
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
//.. this won't be executed until all the statusLabels have finished invoking getObject()
}
}
我想避免创建一个暴露我的服务的 Web 服务并且不得不编写我自己的 AJAX 调用。我有哪些选择?(使用 Wicket 1.5 / Pax-Wicket)