Ich bin seit ungefähr einem Jahr nicht mehr in der Produktentwicklung und -wartung und freue mich sagen zu können, dass Apache Wicket 8.0.0 veröffentlicht wurde 22 / wicket-8-release.html).
Artikel mit typischen Änderungen um 8.0.0_M3 wurde im Winter 2016 geschrieben und dieses Mal im Mai 2018 veröffentlicht Es scheint, dass es eine lange Anlaufphase war.
In diesem Artikel werde ich die ** Teile, die sich zum Zeitpunkt der offiziellen Veröffentlichung geändert haben **, in den Artikeln um M3 zusammenfassen. Ich werde auf den M3-Artikel für die Teile verlinken, die sich nicht geändert haben. Es werden nicht alle Änderungen und Migrationshandbuch behandelt.
Es scheint keine wesentliche Änderung gegenüber dem M3-Artikel zu geben.
--LambdaModel
kann verwendet werden
AbstractReadOnlyModel
ist veraltet (benutze IModel # getModel
)Letzter Artikel: https://qiita.com/gishi_yama/items/59fae7f2a56df31c5749#model Änderungen
** Die Unterstützung für Standardbibliotheken wurde eingestellt **.
Zum Beispiel
So wie es gemacht wurde, als ich in M3 war
Link<Void> foo = Link.onClick("toHogePage", (l) -> setResponsePage(new toHogePage(model)));
** Lambda-Ausdruck & fabrikähnliches Schreiben wie ** können nicht nur durch ein Upgrade auf 8 durchgeführt werden.
Dies wurde zum Zeitpunkt der Veröffentlichung von M5 entschieden und hat einen irreversiblen Effekt (es kann später hinzugefügt, aber nicht später gestoppt werden). Es ist eine gute Idee, eine Methode, die für alle Komponenten überschrieben werden kann, in ein Lambda, Ajax, umzuwandeln. Der Grund dafür scheint zu sein, dass es schwierig ist, die Metainformationen der Komponente beizubehalten.
Es ist jedoch nicht der Fall, dass Lambda-Ausdrücke nicht mehr in Komponenten verwendet werden können.
Wicketstuff Lambda Components
Wicket organisiert Erweiterungskomponenten usw. in einem Projekt namens WicketStuff, das durch Hinzufügen einer Bibliothek verwendet werden kann. Anstelle der oben genannten haben wir jetzt eine Fabrik für Komponenten, die Lambda-Ausdrücke verwenden können.
pom.xml
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-lambda-components</artifactId>
<version>8.0.0</version>
</dependency>
Fügen Sie die Bibliothek mit hinzu
ComponentFactory-Beispiel
//Bis zu Wicket 7------------
Link<Void> link = new Link<Void>("toFooPage") {
private static final long serialVersionUID = 3391006051307639762L;
@Override
public void onClick() {
//Verschiedene Verarbeitung
setResponsePage(new FooPage(model));
}
};
//Fabrikbeispiel für Wicket 8 & Wicketstuff Lambda Components------------
//Das zweite Argument, link, bezieht sich auf die deklarierte Link-Instanz selbst.
Link<Void> link = ComponentFactory.link("toFooPage", (link) -> {
//Verschiedene Verarbeitung
setResponsePage(new FooPage(model));
});
//Wenn Sie die Seite nur verschieben, können Sie sie eine Zeile lang machen
Link<Void> link = ComponentFactory.link("toFooPage", (link) -> setResponsePage(new FooPage(model)));
Sie können die Factory-Methode wie folgt verwenden.
Wenn Sie statisch "ComponentFactory" importieren,
Link<Void> foo = link("toListPage", (link) -> setResponsePage(new FooPage(model)));
Sie können das schreiben, und es wird sauberer.
Komponenten, für die in ComponentFactory
eine Factory-Methode bereitgestellt wird
Es gibt 5 Arten. Ich persönlich wollte "Button", aber ich habe es nicht ... (vielleicht sollte ich eine Pull-Anfrage senden).
Behavior
Es scheint keine wesentliche Änderung gegenüber dem M3-Artikel zu geben. Dies kann mit dem Lambda-Ausdruck deklariert werden, wie er ursprünglich war.
Frühere Artikel: https://qiita.com/gishi_yama/items/59fae7f2a56df31c5749#behavior
Außerdem wird es von Wicket8 an "AjaxEventBehavior" usw. übergeben. ** Der JS-Ereignisname unterstützt nur diejenigen ohne Präfix wie "click" "blur" ** (das Präfix ist in Wicket6 veraltet). .. Es ist eine gute Idee, dies bei der Migration auf einmal zu überprüfen.
Ich persönlich habe darauf geachtet, wie viel Lambda hereinkommen würde, aber es wurde auf eine Weise veröffentlicht, die drastische Änderungen vermeidet. Da die Grundlagen gleich bleiben, kann das Upgrade aus Sicht der Migration und Wartung einfacher sein.
Es gibt weitere Änderungen. Wenn Sie ein Upgrade durchführen, lesen Sie bitte den Migrationsleitfaden. (Ich möchte es hinzufügen, wenn es einen Fall gibt, in dem ich wartungssüchtig bin)
Das Codebeispiel nach dem Reflektieren des Inhalts dieses Artikels lautet hier.
Recommended Posts