2009-10-31 15 views
7

Tengo problemas para agregar y eliminar un AjaxSelfUpdatingTimerBehavior en Apache Wicket. El comportamiento se agrega bien, pero luego, tan pronto como elimino el comportamiento, aparece una "Página vencida" en el navegador muy pronto, supongo que porque la eliminación no fue limpia. Mi configuración es básicamente una etiqueta que comienza a cambiar por temporizador y dos enlaces: "ir" y "detener". Quiero poder hacer clic en "ir" y luego "detener" (obviamente, sé que nunca funcionará al revés). Aquí está mi completa marcado:¿Cómo puedo eliminar correctamente un AjaxSelfUpdatingTimerBehavior de un componente en Apache Wicket?

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

y es mi código aquí:

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

estoy usando Wicket 1.4.3.

Cualquier ayuda muy apreciada. Gracias.

Respuesta

3

Lo resolví utilizando el método stop() en lugar de intentar eliminar completamente el comportamiento.

En realidad qué desea eliminar por completo en algún momento después de apagarlo (porque mi solución implica Newing un comportamiento arriba cada vez que me golpeó "ir" y quiero seguir para detener e iniciar sin acumular un millón de comportamientos) así que lo solucioné manteniendo una lista de comportamientos para eliminar en algún viaje de ida y vuelta posterior.

+0

También lo implementé usando el método stop(). No sé si (manualmente) eliminar el comportamiento es realmente necesario. Si se detiene, ya no se ejecutará. Y una vez que los usuarios abren una nueva página, los comportamientos desaparecen de todos modos. – Friederike

0

Habría sido agradable poder reiniciar() o algo en AbstractAjaxTimerBehavior para volver a habilitar el comportamiento del temporizador.

Cuestiones relacionadas