按钮单击检票口后启动间隔

时间:2016-07-28 15:26:24

标签: wicket

按钮点击后,我试图开始间隔。

button = form.add(new AjaxButton("button") {
  @Override
  protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
      AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
          private static final long serialVersionUID = 1L;

          @Override
          protected void onPostProcessTarget(AjaxRequestTarget target) {
              logger.debug("onPostProcessTarget");
          }

      };
      this.add(ajaxSelfUpdatingTimerBehavior);
  }
  });
});

点击按钮后,之前的AjaxSelfUpdatingTimerBehavior无法启动。我该如何开始?

奇怪的是,如果我在上一个块之后添加一个像这样的新的

button.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
    private static final long serialVersionUID = 1L;

    @Override
    protected void onPostProcessTarget(AjaxRequestTarget target) {
        logger.debug("onPostProcessTarget2");
    }

});

他们两个都开始了。但最后一个也更新了我不想要的dom。

总而言之,如何在点击按钮后开始间隔? (与第一个代码片段类似)

1 个答案:

答案 0 :(得分:2)

与常规表单提交不同,ajax表单提交(通过类似于此处执行的ajax按钮)不会重新呈现您未通过对其执行target.add(...)明确声明要重新呈现的任何内容。

这意味着您对组件层次结构或组件本身所做的任何更改(如添加新行为)将保留在后端,直到您更新单个组件或重新呈现整个页面

为了在表单提交中传播ajax请求中的任何状态更改target.add(this)。这将使wicket更新组件,从而将其新行为添加到前端。

因此,在您的示例中,代码应如下所示:

button = form.add(new AjaxButton("button") {
  @Override
  protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
      AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) {
          private static final long serialVersionUID = 1L;

          @Override
          protected void onPostProcessTarget(AjaxRequestTarget target) {
              logger.debug("onPostProcessTarget");
          }

      };
      this.add(ajaxSelfUpdatingTimerBehavior);
      target.add(this);
  }
  });
});