[JAVA] Was ist mit den typischen Änderungen in Apache Wicket 8 passiert?

Einführung

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.

Modelländerungen

Es scheint keine wesentliche Änderung gegenüber dem M3-Artikel zu geben.

--LambdaModel kann verwendet werden

Letzter Artikel: https://qiita.com/gishi_yama/items/59fae7f2a56df31c5749#model Änderungen

Komponentenänderungen

Verwendung von Lambda-Ausdrücken in Link und Button

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

Am Ende

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

Was ist mit den typischen Änderungen in Apache Wicket 8 passiert?
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Was tun, wenn die Änderungen nicht in der JAR-Manifestdatei berücksichtigt werden?
Was ist schließlich Objektorientierung oder nur eine Sache, auf die Sie bei der Programmierung achten müssen?
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Was ist eigentlich objektorientiert?
Was ist eigentlich objektorientiert?
Was tun, wenn die Rails-Seite im Rails-Lernprogramm 1.3.2 nicht angezeigt wird?
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Verlieren Sie nicht gegen die ungeprüfte Warnung! → Immerhin konnte ich die ungeprüfte Warnung nicht gewinnen ...
Was tun, wenn Sie Ihr Root-Passwort unter CentOS7 vergessen haben?
Was tun, wenn das von refile gepostete Bild nach dem Einstellen der 404-Fehlerseite in Rails verschwindet?
Übergeben Sie das Gebietsschema i18n an JavaScript
Apache Camel in der Cloud-Ära
Was sind die Regeln in JUnit?
Was tun, wenn das Hintergrundbild nach der Bereitstellung nicht angewendet wird?
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
Was ist CHECKSTYLE: OFF in der Java-Quelle? Checkstyle zu wissen von
Immerhin wollte ich den Inhalt von MySQL mit Docker in der Vorschau anzeigen ...
Was tun gegen "Ein Server läuft bereits ...", ohne dass der Rails-Server im Terminal ausgeschaltet wurde