ajax - Wicket 口 6.3.0 AjaxLink : IAjaxCallListener behaviour

标签 ajax wicket

在 Wicket 6 之前,IAjaxCallDecorator.decorateScipt 返回的 javascript 代码在点击后立即执行。我根据 migration-guide 迁移了 IAjaxCallDecorator . 在 5 秒内点击链接 3 次,预期结果为:

  • 获取前提条件
  • 获取前提条件
  • 获取前提条件
  • 获取成功处理程序
  • 获取成功处理程序
  • 获取成功处理程序

但结果是:

  • 获取前提条件
  • 获取成功处理程序
  • 获取前提条件
  • 获取成功处理程序
  • 获取前提条件
  • 获取成功处理程序

用例:在 Ajax 请求完成之前阻塞,请参阅 http://my.safaribooksonline.com/book/-/9781849511605/deeper-into-ajax/ch07lvl1sec04 (第 162 页)

还有其他方法可以将 IAjaxCallDecorator 迁移到 Wicket 6 吗?

public class HomePage extends WebPage {

 public HomePage(final PageParameters parameters) {
  add(new Label("version", getApplication().getFrameworkSettings().getVersion()));

  AjaxLink<Void> blockingLink = new AjaxLink<Void>("blockingLink") {
    @Override
    public void onClick(AjaxRequestTarget target) {
      try {
        Thread.sleep(5000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    @Override
    protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
      super.updateAjaxAttributes(attributes);

      IAjaxCallListener blockingListener = new AjaxCallListener() {
        @Override
        public CharSequence getPrecondition(Component component) {
          return "console.log('getPrecondition');";
        }
        @Override
        public CharSequence getSuccessHandler(Component component) {
          return "console.log('getSuccessHandler');";
        }
      };
      attributes.getAjaxCallListeners().add(blockingListener);
    }
  };
  add(blockingLink);
 }
}

最佳答案

用例:在 Ajax 请求完成之前阻塞,请参阅 http://my.safaribooksonline.com/book/-/9781849511605/deeper-into-ajax/ch07lvl1sec04 (第 162 页)

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
  super.updateAjaxAttributes(attributes);
  attributes.setChannel(new AjaxChannel("myChannel", AjaxChannel.Type.ACTIVE));
}

完成了任务。见wicket forum

关于ajax - Wicket 口 6.3.0 AjaxLink : IAjaxCallListener behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13863927/

相关文章:

java - 有没有一种可以重载的 BreadCrumbBar 方法来添加要刷新的额外组件?

java - 如何最佳地使用 Wicket 中的 DropDownChoice 和 ChoiceRenderer 来处理显示和 ID 值?

java - Wicket FormComponentPanel 中的模型

javascript - 刷新(重新发送)xmlhttp 请求在 IE 浏览器中不起作用

c# - 派生类型的 ASP.NET ScriptService 反序列化问题

javascript - 使用ajax和现有表单数据上传文件

javascript - 如何从 Laravel 5 中的 AJAX 调用返回 View ?

java - 为什么在 wicket 模型中 Finalize 方法被调用 2 次

scala - 您对 Scala+Wicket 的体验

php - 为 mysql、php 表创建过滤器