Wicket在AjaxRequestTarget中调用Javascript函数

时间:2017-06-13 10:27:46

标签: javascript java ajax wicket

我有一个使用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 public abstract class 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()"和"完成()"被正确调用,但是onClickOK方法内的请求写入的执行继续,我无法显示忙指示符。

1 个答案:

答案 0 :(得分:1)

onClickOk()中执行此操作为时已晚。一旦请求完成,写入Web响应的任何内容都将发送到浏览器。

您需要使用AjaxCallListener#onBeforeSend()onComplete()。这些是在发出请求之前和收到回复之后在客户端执行的。

有关示例,请参阅https://github.com/l0rdn1kk0n/wicket-bootstrap/blob/73a3d62a17c12cbca60d6b54caeee6b99ffbe9a8/bootstrap-extensions/src/main/java/de/agilecoders/wicket/extensions/markup/html/bootstrap/ladda/LaddaAjaxLink.java#L101https://github.com/l0rdn1kk0n/wicket-bootstrap/blob/73a3d62a17c12cbca60d6b54caeee6b99ffbe9a8/bootstrap-extensions/src/main/java/de/agilecoders/wicket/extensions/markup/html/bootstrap/ladda/LaddaAjaxCallListener.java#L15-L16