Le Wicket de demain sera “Generic”! (explications sur les nouveautés de Wicket 1.4)

Tutorial, Wicket par nicogiard Add comments

Si vous suivez la mailing list “dev” de Wicket, un sujet qui revient souvent en ce moment est le passage au Generics. En effet la prochaine version majeure, la 1.4, utilisera pleinement la fonctionnalité apportée par le JDK 1.5 (qui devient la version minimum au passage). Nous allons voir içi ce que ca change pour nous les développeurs.

Le changement principal se situe au niveau des Models. Vous n’avez plus besoin de perpétuellement “Caster” pour avoir accès à votre “ModelObject”. Tous les composants sont donc impactés et sont “Templaté” via les Generics. Cela inclut les panels, les liens, les images, les formulaires, les composants de formulaire comme les labels, les champs texte, les combobox, etc. (quasiment tout en fait).

Java n’étant pas la meilleure implémentation des Generics qui existe (je ne rentre pas dans le débat, je vous invite à parcourir le web pour voir à quel point cette question soulève de débats), et n’étant pas encore moi même 100% “fluent in Generics”, je vais essayer de vous exposer içi les changements que la version 1.4 de Wicket apporteront dans vos applications.

Je vais prendre comme exemple la magnifique application que nous avons créé ensemble lors de l’article Un Quickstart c’est bien, mais après….

On commence par mettre à jour notre fichier [ivy.xml] comme ceci (n’oubliez pas de vider votre répertoire WEB-INF/lib et de rafraîchir régulièrement votre projet dans Eclipse pour voir apparaître les différents jar):

Pour l’instant la dernière version disponible de la version 1.4 est la Milestone 2, la version finale sera très certainement disponible avant cet hiver. Ensuite et c’est là que ca commence à être sympa. Si on crée uns classe qui hérite de [WebApplication], on s’apperçoit que la signature de la méthode [getHomePage()] est différente. En effet celle-ci attend explicitement comme retour une classe qui hérite de la classe [Page] (Class<? extends Page<?>>). Cela permet, dès la compilation, d’éviter de vouloir retourner une classe qui ne serait pas une “Page” au sens Wicket du terme.

package com.noocodecommit.wicket.helloworld.wicket;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;
import com.noocodecommit.wicket.helloworld.wicket.pages.HelloPage;
 
public class HelloWorldApplication extends WebApplication
{
	@Override
	public Class&gt; getHomePage()
	{
		return HelloPage.class;
	}
}

Bon, jusque là, ça va. C’est maintenant que les choses se compliquent. Créont déjà une classe qui hérite de la classe [WebPage].
Eclipse nous prévient d’un message : WebPage is a raw type. References to generic type WebPage should be parameterized.
Cependant nous n’avons en aucune façon besoin de spécifier explicitement de typage fort pour la classe [WebPage]. Donc nous pouvons écrire le code comme cela :

package com.noocodecommit.wicket.helloworld.wicket.pages;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
 
public class HelloPage extends WebPage
{
	public HelloPage()
	{
		add(new Label("lblHello", "Salut le monde!!!"));
	}
}

Deuxième chose que l’on remarque c’est le typage des données du [Label].
Cela permet de dire de façon explicite au compilateur, qu’un [Label] ne peut contenir rien d’autre qu’un [String] comme ObjectModel.
Comme je vous l’ai dit plus haut, tous les composants de wicket ont étés adaptés pour coller aux Générics. Nous le verrons très certainement plus en détail dans un prochain article.

La page HTML associée à la classe [HomePage] elle ne change pas.

<h1 wicket:id="lblHello">[ce qui se trouve ici ne sera pas affiché]</h1>

Voila. Ca y est. Vous avez adapté avec succès votre application à la version 1.4 de Wicket.
Histoire de faire le rabat-joie, je ne saurais que trop vous conseiller que d’effectuer votre migration vers Wicket 1.4 très lentement. Tester régulièrement les changements que vous faites. N’entreprenez pas de modifier toutes vos pages d’un coup avant d’être sûr que tout va fonctionner comme avant. Prennez le temps de bien vous documenter concernant les generics (c’est la partie la plus complexe en fait).

Je vous partagerai très bientôt les sources du projet.

Partagez:
  • E-mail this story to a friend!
  • Bookmarks .fr
  • Google
  • description
  • Digg
  • Facebook
  • del.icio.us
  • Wikio
  • YahooMyWeb

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in