[Java] Wicket et Scala: voici ce que ça donne …

Logo Wicket Scala Dans ce billet, je montrias déjà comment intégrer Scala dans un projet Web eclipse, et comment créer sa première Servlet en Scala.

Dans ce billet, je vais montrer comment faire du Wicket avec Scala, ce qui inclut:

=> Création d’un projet web dynamique dans eclipse
=> Ajout du support Scala (vu dans un billet précédent)
=> Créer une application Wicket avec Scala
=> Créer une page Wicket avec Scala
=> Et comme bonus, comment profiter de la puissance du langage Scala pour alléger l’écriture des pages Wicket.

[Suite:]

Je commence par l’application Wicket. en Java, ça aurait donné ça:

Application Wicket en Java

Je vais la traduire vers Scala, ce qui donne:

Application Wicket en Scala

Pas très différent en structure, mais différents dans les constructions utilisées.

Je passes maintenant à la création d’une page. Ce serait une page simple qui ne fait qu’afficher la date courante.

Version Java:

Page Wicket en Java

Traduction en Scala:

Page Wicket en Scala

La même structure, juste que c’est plus malléable en Scala: pas de points virgules, pas de parenthèses, pas de points, etc.

De là, on peut déjà lancer l’application Web et vérifier que ça marche très bien (avec les version Scala).

Seulement, garder la chose ainsi (traduction directe du code Java vers Scala) ne servirait pas à grand chose …
Essayons alors de profiter de la puissance de Scala !
Je vais commencer par cette histoire de modèles de Wicket, qui oblige à passer par des classes internes et/ou anonymes, ce qui est super moche il faut avouer.
Pour m’en débarasser, la solution directe est de passer par les closures, ou les fonctions dans la terminologie Scala.
Je vais donc définir une classe SModel (pour Scala Model) qui hérite de Model et qui prend une fonction sans paramètres et retournant un Object comme argument à son constructeur, et qui redéfinit la méthode getObject du Model pour qu’elle retourne le résultat d’invoquation de la fonction.

Ceci donne:

Page Wicket en Scala : Reloaded

C’est déjà plus beau et plus leger que l’ancienne version, mais ça peut encore être amélioré !

En effet, le SModel comme vous le remarquez est juste une enveloppe, et ce qui est utile est en fait la fonction qu’on lui passe … alors, débarassons nous de l’enveloppe !
Pour ce faire, je passe par les fonctions implicites de Scala, qui permettent de convertir d’un type à un autre, implicitement, sans avoir à le spécifier explicitement.

Il suffit de définir une fonction implicite qui convertit une fonction vers un SModel pour que le tour soit joué.
Voici ce que ça donne:

Page Wicket en Scala : Revolutions

Là, il suffit juste de passer la fonction au lieu d’un model … impressionnant si vous voulez mon avis :)

Pour finir, je tiens à signaler que je me suis grandement inspiré des reflexions de Nathan Hamblen sur Scala et Wicket.

—-

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: