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