Come posso rimuovere correttamente un AjaxSelfUpdatingTimerBehavior da un componente in Apache Wicket?

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

  •  11-09-2019
  •  | 
  •  

Domanda

Ho problemi con l'aggiunta e la rimozione di una poi AjaxSelfUpdatingTimerBehavior in Apache Wicket. Il comportamento viene aggiunto a posto, ma poi, non appena rimuovo il comportamento che ottiene un "pagina scaduta" venire nel browser molto presto, credo perché la rimozione non era pulito. Il mio set up è fondamentalmente un'etichetta che inizia a cambiare da un timer, e due link: "go" e "stop". Voglio essere in grado di fare clic su "go" e poi "stop" (ovviamente so che non funzionerà mai il contrario!). Ecco la mia completa markup:

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

ed ecco il mio codice:

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

sto usando Wicket 1.4.3.

Qualsiasi aiuto molto apprezzato. Grazie.

È stato utile?

Soluzione

Ho risolto questo utilizzando il metodo stop() invece di tentare di rimuovere il comportamento del tutto.

Io in realtà do vogliono eliminarlo del tutto ad un certo punto dopo l'arresto (perché la mia soluzione comporta Newing un comportamento up ogni volta mi ha colpito "go" e voglio continuare a arrestare e avviare senza accumulare un milione di comportamenti) così ho preso rotonda che mantenendo un elenco di comportamenti da rimuovere su alcuni di andata e ritorno in seguito.

Altri suggerimenti

Sarebbe stato bello essere in grado di chiamare il riavvio () o qualcosa sul AbstractAjaxTimerBehavior per riattivare il comportamento del timer.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top