La version 1.4 de Wicket est enfin disponible. Cette version a pour caractéristiques majeure de ne fonctionner qu'à partir de Java 5 car elle introduit et utilise abondamment les Generics. Cela permet d'ajouter le contrôle de type au niveau des API et en particulier dans l'utilisation des modèles.
Toutes nos félicitations à l'équipe Apache Wicket et en particulier à Martijn Dashorst pour la gestion de la release.
Les principales modifications sont :
- L'interface et les implémentations de IModel utilisent maintenant les Generics
- Les méthodes getModel() et setModel() sur la classe Component ont été renommées en getDefaultModel() et setDefaultModel()
- Les modules Spring ont fusionné, le seul jar nécessaire maintenant est wicket-spring.jar
- Modifications sur plusieurs API afin de bénéficier des fonctionnalités Java 5
- Les jars Wicket sont maintenant packagés avec des METADATA pour en faire des bundle OSGi
La migration de 1.3 vers 1.4 devrait être assez facile, et un guide de migration est disponible.
Le lien vers le post original, mais voici un petit résumé des changements majeurs de cette nouvelle version.
Contrôle de Type
Prenons l'exemple d'une DropDownChoice. Ce composant est un composant de formulaire affichant une liste des choix dans une combobox et autorise une sélection simple d'un élément (Pays, nationalités, type de carte de crédit ...)
La signature d'un constructeur de cette classe en Wicket 1.3.x était la suivante :
public class DropDownChoice extends ... public DropDownChoice(String id, IModel model, IModel choices) }
Avec ce type de constructeur, il quasi impossible de comprendre de quoi il s'agit sans lire la JavaDoc, ou alors via le nom des paramètres.
- Le premier paramètre est l'identifiant du composant.
- Le second paramètre est le modèle contenant la sélection
- Le troisième paramètre est le modèle contenant la liste des choix possible
En Wicket 1.4 le même constructeur s'écrit de la sorte :
public <T> DropDownChoice extends ... public DropDownChoice(String id, IModel<T> model, IModel<? extends List<? extends T>> choices) }
C'est plus verbeux, mais cela indique bien que le deuxième paramètre est un T, ceci étant la valeur qui sera fournie quand la DropDownChoice sélectionne une valeur, et que le second paramètre est une liste d'objets, sous classes de T, la liste dans laquelle choisir une valeur.
Retrait du modèle par défaut d'un composant
En Wicket 1.3 chaque composant avait par défaut un modèle, Label, Link et même le WebMarkupContainer à une propriété "model", tout simplement parce que la classe mère Component en possède un.
Quand l'interface IModel a été "générifiée" cela a eu un impact sur tous les composants et posa quelques problèmes :
- Que faire des composants n'utilisant pas de modèle ?
- Que faire des composants utilisant deux types de modèle ?
Il a été décidé de n'utiliser les Generics que sur les composants pouvant bénéficier de cette information supplémentaire afin d'obtenir un code plus propre comme le suivant :
ListView<Person> peopleListView = new ListView<Person>("people", people) { protected void populateItem(ListItem<Person> item) { item.add(new Link<Person>("editPerson", item.getModel()){ public void onClick() { Person p = getModelObject(); setResponsePage(new EditPersonPage(p)); } }); } };
N'hésitez pas à consulter le post original depuis le site de Wicket


Commentaires
Enfin...!!! :-)