2009-10-31 44 views
7

Apache WicketでAjaxSelfUpdatingTimerBehaviorを追加して削除するのに問題があります。動作は正常に追加されますが、動作を削除するとすぐにブラウザにすぐに「ページの期限切れ」が表示されますが、削除はきれいではなかったと思います。私のセットアップは、基本的にタイマーで変更を開始するラベルと、「go」と「stop」の2つのリンクです。私は "go"をクリックして "stop"をクリックできるようにしたい(明らかに私はそれがまったく別の方法で動作しないことを知っている!)。Apache WicketのコンポーネントからAjaxSelfUpdatingTimerBehaviorを正しく削除するにはどうすればよいですか?

<html>  
    <body>    
     <span wicket:id="message">message will be here</span><br/> 
     <a wicket:id="go">Go</a><br/>   
     <a wicket:id="stop">Stop</a>   
    </body> 
</html> 

とここに私のコードです:私はウィケット1.4.3を使用してい

// imports all from standard wicket 
public class HomePage extends WebPage { 

    private static final int INTERVAL = 500; 

    public HomePage(final PageParameters parameters) { 

     final Component label = new Label("message", 
      "Hello").setOutputMarkupId(true); 

     add(label); 

     final IBehavior updater = new AjaxSelfUpdatingTimerBehavior(Duration 
      .milliseconds(INTERVAL)) { 
      @Override 
      protected void onPostProcessTarget(AjaxRequestTarget target) {      
       label.setDefaultModelObject(String.valueOf(System.nanoTime()));    
      } 
     }; 

     AjaxLink<String> go = new AjaxLink<String>("go") { 
      @Override 
      public void onClick(AjaxRequestTarget target) { 
       label.add(updater);        
       target.addComponent(label); 
      }   
     }; 

     AjaxLink<String> stop = new AjaxLink<String>("stop") { 
      @Override 
      public void onClick(AjaxRequestTarget target) { 
       label.remove(updater); 
       target.addComponent(label); 
      }   
     }; 

     add(go, stop); 
    } 
} 

はここに私の完全なマークアップです。

ご迷惑をおかけして申し訳ございません。ありがとう。

答えて

3

この問題は、動作を完全に削除するのではなく、stop()メソッドを使用して解決しました。

(私の解決策は、NEWING私は「行く」ヒットと私は停止し、万人の行動を計上しなくて起動し続けたい行動まで毎回含むので)私は実際にはそれを停止した後、いくつかの時点で完全に削除したいですだから後の往復で取り除かれるべき行動のリストを維持することで、私はそれを獲得しました。

+0

また、stop()メソッドを使用して実装しました。私は(手動で)動作を削除することが本当に必要かどうかわかりません。停止してもそれ以上は実行されません。そして、ユーザーが新しいページを開くと、その行動はとにかく消えてしまいます。 – Friederike

0

timer動作を再度有効にするには、restart()やAbstractAjaxTimerBehaviorの何かを呼び出すことができたらいいでしょう。

関連する問題