2016-07-28 3 views
2

ボタンをクリックした後にインターバルを開始しようとしています。ボタンをクリックした後の開始間隔

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"); 
    } 

}); 

をこのような新しいものを追加した場合、それらの両方が開始されます。しかし、最後の1つは私が欲しくないドームを更新します。

ボタンクリック後にどのようにしてインターバルを開始できますか? (最初のコードスニペットと同様)

答えて

2

通常のフォームの提出とは異なり、ajaxフォームの提出(ここで行うようなajaxボタンによる)は、明示的に再レン​​ダリングする必要がないことを再レンダリングすることはありませんそれにはtarget.add(...)を実行します。

これは、(新しい動作の追加のような)コンポーネント階層またはコンポーネント自体に対する変更が、個々のコンポーネントを更新するか、または全体を再レンダリングするまで、バックエンドにとどまることを意味しますページ。

ajaxリクエストの状態変更を伝えるには、フォーム提出のtarget.add(this)を呼び出します。これにより、コンポーネントの更新が行われ、その新しい動作がフロントエンドに追加されます。

コードは次のようになります

だから、与えられたあなたの例:だから

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); 
    } 
    }); 
}); 
+0

あなたは私が削除した場合、 '(ajaxSelfUpdatingTimerBehavior)this.addことを言っている;)'と '(button.add;'それは意志再レンダリングしない? – user3960875

+0

'button.add(secondBehavior)'を削除しても再描画されません。 2番目の振る舞いは 'AjaxButton'で行われた変更をページに伝えるものです。 – WiseTree

関連する問題