Ich habe eine Wicket Komponente, die für ein Ereignis (IEvent
) zu hören ist. Wenn ein solches Ereignis eintrifft, möchte ich die Komponente mit einem geänderten Modell erneut rendern. Es gibt keine aktiven Steuerelemente auf der Seite, z. B. AjaxLink
, die das erneute Rendern auslösen können.Wie Rendice-Komponente nach dem Event-Empfang erneut rendern
Gibt es eine Möglichkeit, solche Komponenten zu aktualisieren?
Ich dachte, irgendwie eine AJAX Anfrage von der onEvent
Methode auszulösen und eine AjaxBehavior
zu der erwähnten Komponente hinzuzufügen. Aber ich weiß nicht, wie ich die AJAX-Anfrage auslösen soll.
public class PersonPanel extends Panel implements Observer {
private WebMarkupContainer wrapper;
public PersonPanel(String id) {
super(id);
setDefaultModel(new CompoundPropertyModel<PersonInfo>(getModel()));
wrapper = new WebMarkupContainer("wrapper");
wrapper.setOutputMarkupId(true);
add(wrapper);
wrapper.add(new Label("personID"));
// some more content
}
private IModel<PersonInfo> getModel() {
return new LoadableDetachableModel<PersonInfo>() {
@Override
protected PersonInfo load() {
// model loading logic
}
};
}
@Override
public void onEvent(IEvent<?> event) {
logger.debug("\n Person Panel received an Event: " + event.getPayload());
// Re-rendering of "wrapper" should be triggered from here.
}
@Override
public void update(Observable observable, Object o) {
send(this, Broadcast.EXACT, "Observable cache has changed.");
}
}
Ja, das ist meine Idee - aber wie erstelle ich das 'AjaxRequestTarget'? –
Unter welchen Bedingungen senden Sie die Veranstaltung? Normalerweise geschieht dies in einer Aktionsmethode (wie '#onClick (AjaxRequestTarget)' ',' #onUpdate (AjaxRequestTarget) '), so dass Sie bereits das' Ziel' haben. Wenn dies keine Ajax-Anfrage ist, müssen Sie sie nicht überall hinzufügen, da die gesamte Seite neu gerendert wird. –
Ich habe das Code-Snippet aktualisiert - Sie können jetzt die Methode 'update' sehen, die die' java.util.Observer'-Schnittstelle implementiert. Daher wird das Ereignis von der Komponente selbst als Reaktion auf ein Ereignis "Wicket-extern" gesendet. Der einzige verbleibende Schritt besteht darin, die Komponente ohne vollständiges Neuladen der Seite zu aktualisieren. –