基於此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