¿Cómo puedo eliminar correctamente un AjaxSelfUpdatingTimerBehavior de un componente en Apache Wicket?

StackOverflow https://stackoverflow.com/questions/1654485

  •  11-09-2019
  •  | 
  •  

Pregunta

Tengo problemas con la adición y luego la eliminación de un AjaxSelfUpdatingTimerBehavior en Apache Wicket. El comportamiento se agrega bien, pero entonces tan pronto como se quita el comportamiento recibo una "página caducada" ven en el navegador muy pronto, supongo que debido a la eliminación no estaba limpia. Mi puesta a punto es básicamente una etiqueta que empieza a cambiar por temporizador, y dos enlaces: "Go" y "stop". Quiero ser capaz de hacer clic en "ir" y luego "stop" (obviamente sé que no va a funcionar al revés!). Aquí está mi completa marcado:

<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 aquí está mi código:

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

¿Fue útil?

Solución

I resuelto este utilizando el método stop() en lugar de intentar retirar el comportamiento completo.

En realidad, hacer 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 yo quiero seguir para detener e iniciar sin acumular un millón de comportamientos) así que tuve tiempo que manteniendo una lista de comportamientos que ser eliminado en alguna de ida y vuelta más tarde.

Otros consejos

Hubiera sido agradable ser capaz de llamar a restart () o algo en AbstractAjaxTimerBehavior para volver a habilitar el comportamiento temporizador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top