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.
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.
de
LoadableDetachacbleModel --ʻAbstractReadOnlyModel
est obsolète (utilisez ʻIModel # getModel`)Article précédent: https://qiita.com/gishi_yama/items/59fae7f2a56df31c5749#model changes
** 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 que
click`` 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.
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.