2009-10-31 1 views
7

Ich habe Probleme mit dem Hinzufügen und Entfernen eines AjaxSelfUpdatingTimerBehavior in Apache Wicket. Das Verhalten wird in Ordnung hinzugefügt, aber sobald ich das Verhalten entferne, bekomme ich sehr bald eine "Page Expired" im Browser, da die Entfernung nicht sauber war. Mein Setup ist im Grunde genommen ein Label, das nach Timer wechselt, und zwei Links: "go" und "stop". Ich möchte in der Lage sein, auf "go" und dann auf "stop" zu klicken (offensichtlich weiß ich, dass es nie andersherum funktionieren wird!). Hier ist meine komplette Markup:Wie kann ich ein AjaxSelfUpdatingTimerBehavior korrekt aus einer Komponente in Apache Wicket entfernen?

<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> 

und hier ist mein Code:

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

Ich verwende Wicket 1.4.3.

Jede Hilfe sehr geschätzt. Vielen Dank.

Antwort

3

Ich löste das mithilfe der stop() Methode, anstatt zu versuchen, das Verhalten vollständig zu entfernen.

ich eigentlich wollen es irgendwann vollständig zu entfernen, nachdem sie stoppen (weil meine Lösung jedes Mal newing ein Verhalten up beinhaltet I „gehen“ getroffen, und ich will, ohne anfallende eine Million Verhalten zu beenden und starten, um fortzufahren) Also habe ich das verstanden, indem ich eine Liste mit Verhaltensweisen erstellt habe, die bei einer späteren Rundreise entfernt werden.

+0

Ich implementiert es auch mit der stop() -Methode. Ich weiß nicht, ob (manuell) das Entfernen des Verhaltens wirklich notwendig ist. Wenn es gestoppt wird, wird es nicht mehr ausgeführt. Und sobald die Benutzer eine neue Seite öffnen, sind die Verhaltensweisen sowieso weg. – Friederike

0

Es wäre schön gewesen, restart() oder etwas in AbstractAjaxTimerBehavior aufrufen zu können, um das Timer-Verhalten wieder zu aktivieren.

Verwandte Themen