基于此SO question,我了解到Wicket会对后续的AJAX请求进行排队。现在我的页面被几个AJAX请求缠住了,我想再添加一个,产生一个冗长的操作。Wicket调用冗长的操作并通过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)
你能更详细地解释你的问题吗?您有一个列表视图,其中lenghtyOperation导致ListView项目非常缓慢地出现。然后,当ListView完成时,你又得到了一个完整的ajax请求队列?你期望的行为是什么? – 2013-03-11 12:31:40
啊哈,我这次解释好了吗?对困惑感到抱歉。 – 2013-03-11 13:06:49
看看http://wicket.apache.org/apidocs/1.5/org/apache/wicket/ajax/AjaxChannel.html我还没完全理解。问题是,填充列表视图许多ajaxrequest阻止你实际上提交使用按钮的可能性,因为请求将是队列中的最后一个? – 2013-03-11 14:24:36