我有一個使用Wicket的Web應用程序。我的問題如下: 我有一部分代碼運行在AjaxRequestTarget中,花費很長時間,並且我有必要在此操作期間顯示一個繁忙的指示符,以便向用戶顯示我們正在嘗試處理請求。我嘗試使用target.appendJavascript(「jsfunction()」),但它不起作用,因爲它在方法執行後被觸發。我怎樣才能實現這個目標?Wicket在AjaxRequestTarget中調用Javascript函數
我的示例代碼是由Martin-G提供了以下
final ConfirmModal del_modal = new ConfirmModal("del-btn", "Are you sure?") {
@Override
public void onClickOK(AjaxRequestTarget target) {
target.appendJavaScript("loadingFormFromTarget();");
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
Logger.getLogger(ListPricePlanPage.class.getName()).log(Level.SEVERE, null, ex);
}}}
UPDATE
該解決方案正常工作與AjaxLink,但我的問題是比較複雜的。我有一個擴展ModalWindo一個ConfirmModal,這個實現 公共抽象類ConfirmModalPanel擴展面板{
public ConfirmModalPanel(String id, String text) {
super(id);
add(new Label("text", text));
AjaxLink ok = new AjaxLink("ok") {
@Override
public void onClick(AjaxRequestTarget target) {
onClikOK(target);
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
attributes.getAjaxCallListeners().add(new AjaxCallListener().onBeforeSend("start();").onComplete("finish();"));
}
};
add(ok);
add(new AjaxLink("ko") {
@Override
public void onClick(AjaxRequestTarget target
) {
onClikKO(target);
}
}
);
}
abstract public void onClikOK(AjaxRequestTarget target);
abstract public void onClikKO(AjaxRequestTarget target
);
}
功能「開始()」和「完成()」的正確調用,但onClickOK方法內的請求寫入執行繼續,並且我無法顯示忙指示符。
此解決方案在AjaxLink上正常工作,但在我的情況下不起作用。我已經更新了描述。 –
您應該在'start()'中顯示指標,並將其隱藏在'finish()'中。這個想法是在向服務器端發出請求之前顯示它。你可以使用'setTimeout(...)'來延遲顯示它。在這種情況下,你也必須在'finish()'中使用'clearTimeout()'。 –
我在您的幫助下解決了問題,但我以這種方式修改瞭解決方案。我使用AjaxCallListener通過updateAjaxAttributes使用setTimeout來引發事件start():onSendBefore,並且我在onCLickOk方法內用方法target.appendJavascript(「finish()」)引發事件finish()。這工作正常。 –