【发布时间】:2013-02-26 13:08:38
【问题描述】:
基于此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)
【问题讨论】:
-
你能更详细地解释你的问题吗?您有一个 ListView 项目,其中 lenghtyOperation 导致 ListView 项目非常缓慢地出现。然后当 ListView 完成时,你又得到了一个完整的 ajax 请求队列?您期望的期望行为是什么?
-
哎呀,我这次解释得更好了吗?很抱歉造成混乱。
-
看看wicket.apache.org/apidocs/1.5/org/apache/wicket/ajax/…我还是不太明白。问题是填充列表视图许多 ajaxrequest 实际上阻止了您使用按钮提交的可能性,因为请求将是队列中的最后一个?
-
是的,或多或少。考虑到我在
getObject()方法中执行的操作可能需要几分钟,它会阻塞其他AJAX 请求(例如AjaxButton#onSubmit)
标签: java web-applications web osgi wicket