【问题标题】:Start interval after button click wicket按钮单击检票口后开始间隔
【发布时间】:2016-07-28 15:26:23
【问题描述】:

我正在尝试在单击按钮后开始间隔。

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。

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

【问题讨论】:

    标签: wicket


    【解决方案1】:

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

    【讨论】:

    • 所以你是说如果我删除this.add(ajaxSelfUpdatingTimerBehavior);button.add(); 它不会重新渲染?
    • 如果您删除button.add(secondBehavior),它将不会重新渲染。因为第二种行为是将AjaxButton 中所做的更改带到页面。
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2014-09-02
    • 2019-08-16
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多