2017-02-22 1 views
0

Betrachten Sie eine Seite, welche Unterklassen WebPage. Sein Konstruktor erzeugt und fügt eine WebMarkupContainer hinzu, die eine ListView Komponente enthält, die von einer LoadableDetachableModel unterstützt wird.ListView von Wicket Page LoadableDetachableModel wird über AJAX-Aufruf geändert. Seite nicht neu zeichnen

Die Seite fügt auch zwei Instanzen von anonymen Unterklassen von AbstractDefaultAjaxBehavior hinzu [jeweils überschreiben die Klasse 'renderHead und Methoden].

Die entsprechende HTML enthält ein <div> von wicket:id an die WMC gebunden und ein <table> mit <tr> ‚s an die ListView Komponente ListItems gebunden.

Die Seite wird beim ersten Mal korrekt angezeigt.

Basierend auf der Benutzerinteraktion mit dem Client legt die betreffende AbstractDefaultAjaxBehavior Informationen zum Modellobjekt des Modells fest. Die Information soll verwendet werden, um die Art und Weise zu ändern, in der ein bestimmter listitem als <td> innerhalb der Zeile in der Tabelle erscheint - insbesondere sollte der Text einer ausgewählten Zeile in Fettdruck angezeigt werden.

Diagnose Debugger-Breakpoints und System.out Informationen auf beiden Seiten der den AJAX-Aufruf zu bestätigen, dass das respond Methode des Verhaltens korrekt aufgerufen wird, und dass das Modellobjekt korrekt geändert wird.

Die Seite wird nie automatisch neu gezeichnet.Manuelles erneutes Laden der Seite aus dem Browser zeigt korrektes Verhalten.

ich dieses Problem und fand eine Vielzahl von möglicherweise im Zusammenhang Lösungen erforscht habe, die ich versucht habe, einschließlich

  • target.add(webMarkupContainer); aus dem Verhalten des respond Methode in Verbindung mit

  • Aufruf
  • Aufruf target.appendJavaScript("window.location.reload();"); von der Methode.

  • setResponsePage(this); Aufruf, setResponsePage(Page.class); und setResponsePage(getPage()); vom respond Verfahren sowie von einer außer Kraft gesetzt onBeforeRender Methode auf der Seite.

Irgendwelche Vorschläge?

Antwort

0

AbstractDefaultAjaxBehavior aktualisiert keine Komponenten automatisch.

Hat target.add(webMarkupContainer) geholfen? Wenn nicht, hast du webMarkupContainer.setOutputMarkupId(true) angerufen?

+0

Ich habe beide, in verschiedenen Kombinationen, erfolglos. Ich folgte Ihrem Lead re 'AbstractDefaultAjaxBehavior' und überarbeitete die Implementierung für das problematische Ereignis als 'AjaxEventBehavior', was jetzt funktioniert. Danke für den Tipp - ich nehme an, dass ich diesen nützlichen Teil irgendwo auf dem Weg vermisst habe.Wenn es jemandem nichts ausmacht, können sie mich auf relevante Referenzinformationen verweisen, wo die nicht aktualisierende Natur der abstrakten Klasse beschrieben wird. Danke noch einmal. –

Verwandte Themen