Concours - Développer une application web en Wicket


Développer des applications web peut être plus moins long et difficile en fonction du framework web utilisé. Wicket étonne par sa simplicité, sa rapidité de développement et l'élégance du modèle de programmation. Il s'agit d'un framework web de type composant entièrement en Java pour la partie serveur et en xHTML / CSS pour la partie cliente. Wicket possède également un moteur Ajax fortement intégré au framework permettant de bénéficier de certaines fonctionnalités très facilement. Pour bien développer en Wicket ? Il suffit de maîtriser le langage Java et les concepts objets.

Lors de la soirée web du Paris JUG du 10 mars 2009, nous avons développé une mini application web de gestion de contacts. Certes il ne s'agit pas d'un cas réel d'entreprise, mais cette application permet déjà d'illustrer différentes fonctionnalités sommes toutes assez variées.

La diversité des "use case" ainsi développés permet d'initier un comparatif entre frameworks web. Les critères importants de ce comparatif sont le temps de réalisation, le nombre de lignes de code produites ainsi que le nombre de lignes de configuration (XML ou annotations).

Nous fournissons, via ce blog, un Starter Kit sous forme de projet Eclipse contenant les fichiers HTML ainsi que les ressources (images / CSS). Nous fournissons aussi la solution, sous forme de projet Eclipse également, telle que développée lors du Paris JUG.

Le concours consiste à développer la même application avec le framework web de votre choix en utilisant le "Starter Kit" mis à disposition. N'hésitez pas à nous poster vos résultats via les commentaires et nous ferons un résumé comparatif avec ceux ci que nous publierons pour le prochain JUG.

Pour information les fonctionnalités de l'application fournie en solution sont les suivantes :

  • La navigation entre pages
  • L'organisation d'une structure commune des pages (Type Tiles / Sitemesh)
  • La désactivation du lien correspondant à la page courante
  • L'édition d'un contact
  • La création d'un contact
  • Lister les contacts
  • L'ajout rapide d'un contact dans une liste
  • Le refresh de la date courante via appels Ajax
  • L'édition "in place" d'un libellé sans passer par un écran d'édition
  • L'ajout de la validation (Nom et prénom obligatoires, contrôle du format date, contrôle du type email)
  • Utilisation d'un date picker
  • Synchronisation du format du DatePicker avec le format utilisé par le convertisseur
  • Ajout des mêmes contrôles de validation côté client, en Javascript
  • Gestion de la problématique du refresh afin d'éviter la double soumission
  • Non duplication du code du formulaire... le même composant doit être utilisé pour la page d'édition de contacts et de liste des contacts
  • Le drag & drop depuis la liste vers le formulaire d'édition
  • L'affichage de message d'erreurs
  • La réutilisation des mêmes messages d'erreurs en validation serveur et javascript
  • Le tri de la liste des contacts par nom et par prénom

Le résultat du développement avec Wicket est le suivant :

  • 12 classes (classes internes incluses et la classe Contact exclue)
  • 163 lignes de codes
  • 1 seule configuration XML (Le filtre dans le web.xml)
  • 0 lignes de javascript codées
  • Temps de développement < 1 heure

Pour information, la classe Contact à elle seule représente 33 lignes de code, soit 17% de l'application.

Bon courage et un livre Wicket in Action sera offert par tirage au sort à l'un des participants de ce concours !


Commentaires

1. Le mercredi 11 mars 2009, 16:24 par Alexandre de Pellegrin

Punaise! Je le ferais bien en GWT mais je sais déjà que c'est impossible en 1 heure sans utiliser une bibliothèque de composants tierce.
Belle initiative en tout cas!

2. Le vendredi 13 mars 2009, 11:40 par David MARTIN

Rien n'empeche d'utiliser une librairie tierce pour GWT, l'application Wicket utilise bien wicketstuff-scriptaculous et wicketstuff-yav...

3. Le vendredi 13 mars 2009, 13:59 par Antoine

Un lot parmi les participants... vous n'envisagez pas de gagnant ;-).
Chapeau pour l'exploit !

4. Le vendredi 13 mars 2009, 23:10 par Cyril Lakech

En GWT a vu d'oeil on doit être a 500 lignes environs... et 3 heures de temps minimum !!!

Mais il a des choses comme les templates qui fonctionnent différemment et sans librairies tierces tout ceci serait trop fastidieux à coder.

Bonne idée, peut être que du côté de grails on pourrait concurrencer tout ça !?

5. Le samedi 14 mars 2009, 13:40 par Damien Gouyette

Bonjour,

Par defaut, les exemples ne fonctionnent pas :
- le maven compiler plugin n'est pas configuré pour compiler les sources en java 1.5
- Pas moyen de les classes correspondantes aux imports :
import org.wicketstuff.scriptaculous.dragdrop.DraggableBehavior;
import org.wicketstuff.scriptaculous.dragdrop.DraggableTarget;
import org.wicketstuff.yav.YavBehavior;

6. Le lundi 16 mars 2009, 00:34 par Carl Azoury

Bonjour Damien,

Pour faire fonctionner l'exemple, le maven-compiler afin de compiler les sources en Java 1.5 doit être rajouté dans le pom.xml du projet contenant la solution, tu en trouveras un exemple depuis le projet "Starter".

Pour les classes qui ne compilent pas, tu dois rajouter dans le build path les deux fichiers jar contenu dans le répertoire lib. L'un est l'intégration Wicket/Scriptaculous, l'autre est une contribution Zenika.

Pour David :

Oui, rien n'empêche d'utiliser une librairie tierce, au contraire. Mais il est intéressant de constater le mécanisme de Wicket, utilisant les Behavior, que l'on peut développer soit même, et qui permet de rajouter du comportement de manière très simple.

Enfin, pour tous, vous trouverez un nouveau projet à télécharger "WithHibernate" qui permet d'ajouter à ce projet une persistance Hibernate de manière très simple. Je tiens à remercier pour cette contribution Jérôme Mirc qui a intégré dans l'application le projet Wicket DataBinder. Lien vers le projet http://databinder.net/site/show/ove...

7. Le mardi 17 mars 2009, 15:30 par Alexandre de Pellegrin

Bon, je vous fais l'implem en SmartGWT. J'ai presque fini.

8. Le jeudi 19 mars 2009, 09:59 par fstephany

Salut,

Est-il possible de voir une version déployée quelque part?
Je n'ai aucune idée de comment déployer du Wicket et j'ai l'impression que déployer l'exemple prend plus de temps que le développer (du moins quand on n'a aucune expérience de Wicket / J2EE )

Merci :)

9. Le jeudi 19 mars 2009, 18:05 par Guillaume

Peut-on vraiment comparer en ces termes GWT et Wicket ? Ils servent des choix d'architecture différents. On y est servi plus vite et pour bien moins cher, ça fait pas de MacDonald un meilleur cuisinier que Ducasse ; disons qu'on vient pas y chercher la même chose.
Par contre, pour avoir fait pas mal de Struts, Wicket m'a l'air d'apporter un gros gain de productivité pour ce genre d'architectures.

10. Le mercredi 8 avril 2009, 17:41 par Carl Azoury

Etapes d'installation et d'exécution de l'application ZenContact :

Etape 1 :

Invoquer les deux commandes suivantes, depuis la racine du projet, afin d'installer les deux librairies fournies dans WEB-INF/lib au niveau du repository local

mvn install:install-file -Dfile=src/main/webapp/WEB-INF/lib/wicketstuff-scriptaculous-1.3.jar -Dpackaging=jar -DgroupId=org.wicketstuff -DartifactId=scriptaculous -Dversion=1.3

mvn install:install-file -Dfile=src/main/webapp/WEB-INF/lib/wicketstuff-yav-1.0.jar -Dpackaging=jar -DgroupId=org.wicketstuff -DartifactId=yav -Dversion=1.0

Etape 2 : Démarrer le serveur en faisant mvn jetty:run ou mvnDebug jetty:run pour le remote debugging

11. Le vendredi 10 avril 2009, 02:43 par Alexandre de Pellegrin

Chose promise... chose dûe!

Voilà, je vous livre le projet migré en SmartGWT. Et, cerise sur le gateau, j'ai fait un post sur mes conclusions. Je vous invite à le lire.

Le post : http://javacolors.blogspot.com/2009...
Le projet compilé (à dézipper + trouver le WelcomePage.html) : http://alexandre.de.pellegrin.googl...
Les sources : http://pages.google.com/edit/alexan...

Et comme c'est du GWT, le projet n'a même pas besoin de serveur pour tourner. Tout fonctionne en local sur le navigateur.

Bon alors, j'ai mérité mon "Wicket in Action", non?

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.