[JAVA] Qu'est-il arrivé aux modifications typiques d'Apache Wicket 8?

introduction

Je suis absent du développement et de la maintenance de produits depuis environ un an, et je suis heureux de dire que Apache Wicket 8.0.0 a été publié 22 / wicket-8-published.html).

Article des changements typiques autour de 8.0.0_M3 a été écrit en hiver 2016 et publié en mai 2018, donc cette fois Il semble que ce fut une longue période de préparation.

Dans cet article, je vais résumer les ** parties qui ont changé au moment de la sortie officielle ** dans les articles autour de M3. Je vais faire un lien vers l'article M3 pour les pièces qui n'ont pas changé. Il ne couvre pas tous les changements et guide de migration.

Modifications du modèle

Il ne semble y avoir aucun changement majeur par rapport à l'article M3.

--LambdaModel peut être utilisé --Si vous transmettez une expression Lambda ou une référence de méthode au composant, il l'enveloppera dans le modèle.

Article précédent: https://qiita.com/gishi_yama/items/59fae7f2a56df31c5749#model changes

Modifications des composants

Utilisation d'expressions lambda dans Link et Button

** La prise en charge des bibliothèques standard a été interrompue **.

Par exemple

La façon dont c'était fait quand j'étais en M3


Link<Void> foo = Link.onClick("toHogePage", (l) -> setResponsePage(new toHogePage(model)));

** L'expression Lambda et l'écriture de type usine comme ** ne peuvent pas être effectuées uniquement en passant à 8.

Cela a été décidé au moment de la sortie de M5, et cela a un effet irréversible (il peut être ajouté plus tard mais ne peut pas être arrêté plus tard), et c'est une bonne idée de créer une méthode qui peut être remplacée pour tous les composants dans un lambda, Ajax. Il semble que la raison en soit qu'il soit difficile de conserver les méta-informations du composant.

Cependant, les expressions Lambda ne peuvent plus être utilisées dans les composants.

Wicketstuff Lambda Components

Wicket organise les composants d'extension, etc. dans un projet appelé WicketStuff, qui peut être utilisé en ajoutant une bibliothèque. Au lieu de ce qui précède, nous avons maintenant une fabrique pour les composants qui peuvent utiliser des expressions Lambda.

pom.xml


    <dependency>
      <groupId>org.wicketstuff</groupId>
      <artifactId>wicketstuff-lambda-components</artifactId>
      <version>8.0.0</version>
    </dependency>

Ajouter la bibliothèque avec

Exemple de ComponentFactory


//Jusqu'à Wicket 7------------
Link<Void> link = new Link<Void>("toFooPage") {
  private static final long serialVersionUID = 3391006051307639762L;

  @Override
  public void onClick() {
    //Traitement divers
    setResponsePage(new FooPage(model));
  }
};


//Exemple d'usine de composants Lambda Wicket 8 & Wicketstuff------------
//Le deuxième argument, link, fait référence à l'instance Link déclarée elle-même.
Link<Void> link = ComponentFactory.link("toFooPage", (link) -> {
  //Traitement divers
  setResponsePage(new FooPage(model));
});

//Si vous déplacez simplement la page, vous pouvez en faire une ligne
Link<Void> link = ComponentFactory.link("toFooPage", (link) -> setResponsePage(new FooPage(model)));


Vous pouvez utiliser la méthode d'usine comme ceci.

Si vous importez de manière statique ComponentFactory,

Link<Void> foo = link("toListPage", (link) -> setResponsePage(new FooPage(model)));

Vous pouvez écrire cela, et ce sera plus propre.

Composants pour lesquels une méthode d'usine est fournie dans ComponentFactory

Il existe 5 types. Je voulais personnellement Button, mais je ne l'ai pas ... (peut-être que je devrais envoyer une pull request).

Behavior

Il ne semble y avoir aucun changement majeur par rapport à l'article M3. Cela peut être déclaré à l'aide de l'expression Lambda telle qu'elle était à l'origine.

Articles précédents: https://qiita.com/gishi_yama/items/59fae7f2a56df31c5749#behavior

De plus, à partir de Wicket8, passez-le à ʻAjaxEventBehavioretc. ** Seuls ceux dont le nom d'événement JS n'a pas de préfixe on tel queclick`` blur` sont pris en charge ** (le préfixe est obsolète dans Wicket6) .. C'est une bonne idée de tout vérifier en même temps lors de la migration.

À la fin

J'ai personnellement prêté attention à la quantité de Lambda qui entrerait, mais il a été publié de manière à éviter des changements radicaux. Étant donné que les bases restent les mêmes, la mise à niveau peut être plus facile du point de vue de la migration et de la maintenance.

Il y a d'autres changements, donc si vous mettez à jour, veuillez vous référer au guide de migration. (Je voudrais l'ajouter s'il y a un cas où je suis accro à la maintenance)

L'exemple de code après avoir reflété le contenu de cet article est ici.

Recommended Posts

Qu'est-il arrivé aux modifications typiques d'Apache Wicket 8?
Que faire lorsque les modifications du servlet ne sont pas reflétées
Que faire si les modifications ne sont pas reflétées dans le fichier manifeste JAR
Qu'est-ce que l'orientation objet après tout ou juste une chose à surveiller dans la programmation
Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que l'orientation objet après tout?
Que faire si la page Rails n'est pas affichée dans le didacticiel Rails 1.3.2
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Ne perdez pas à l'avertissement non vérifié! → Après tout, je n'ai pas pu gagner l'avertissement non vérifié ...
Que faire si vous oubliez votre mot de passe root sur CentOS7
Que faire si l'image publiée par refile disparaît après avoir défini la page d'erreur 404 dans Rails
Passer les paramètres régionaux i18n à JavaScript
Apache Camel à l'ère du cloud natif
Quelles sont les règles de JUnit?
Que faire si l'image d'arrière-plan n'est pas appliquée après le déploiement
Que faire lorsque le préfixe c n'est pas lié dans JSP
Qu'est-ce que CHECKSTYLE: OFF trouvé dans la source Java? Checkstyle à savoir de
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...
Que faire à propos de "Un serveur est déjà en cours d'exécution ..." qui s'est produit sans désactiver le serveur de rails dans le terminal