【发布时间】:2017-06-13 10:27:45
【问题描述】:
我有一个使用 Wicket 的 Web 应用程序。我的问题如下: 我有一段在 AjaxRequestTarget 中运行的代码会花费很长时间,并且我有必要在此操作期间显示一个忙碌指示符,以便向用户显示我们正在尝试处理请求。
我尝试使用 target.appendJavascript("jsfunction()") 但它不起作用,因为它在方法执行后被触发。我怎样才能实现这个目标?
我的示例代码如下
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);
}}}
更新
martin-g 提供的解决方案适用于 AjaxLink,但我的问题更复杂。我有一个扩展 ModalWindo 的 ConfirmModal,具有此实现 公共抽象类 ConfirmModalPanel 扩展 Panel {
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
);
}
函数“start()”和“finish()”被正确调用,但是 onClickOK 方法中写入的请求继续执行,我无法显示忙碌指示符。
【问题讨论】:
标签: javascript java ajax wicket