按钮单击检票口后开始间隔

Start interval after button click 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。

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

与常规表单提交不同,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);
  }
  });
});