Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Prochaines sessions inter-entreprises : 28-31 mars 2017 / 13-16 juin 2017
Sessions intra-entreprises sur demande.
Inscrivez-vous vite !

Paris JUG "Web" : compte-rendu

Mieux vaut tard que jamais, voici le compte-rendu du dernier Paris JUG qui portait sur les technologies innovantes du web.

Mais avant de commencer, les organisateurs du JUG avaient quelques messages à faire passer.

  • Tout d'abord, le JUG cherche des sponsors ! Si la salle est généreusement mise à disposition par l'ISEP, le buffet en revanche est à la discrétion des sponsors. Ceux-ci commencent à manquer, et nous avons dû nous contenter de quelques bouteilles de soda pour cette fois... Ayez pitié des développeurs, sponsorisez des buffets !
  • Java Black Belt, le site d'entraînement aux certifications Java, offre des points aux participants du JUG ! Il suffit de les demander sur la mailing-list.
  • Jazoon offre des réductions également. Même principe, il suffit d'être spectateur assidu du JUG et de les demander sur la mailing-list. Ne ratez pas cet événement !
  • Enfin, Lille fête la création du Chti-JUG ! Tous les speakers intéressés par l'animation de présentations sont les bienvenus.

Wicket : le développement web facile

La première séance était présentée par Nicolas André et Carl Azoury, du cabinet d'architecture informatique Zenika[1]. Pour une fois, aucune projection de slides, aucune théorie : la présentation a pris la forme du développement en direct live d'une petite application de gestion de contacts, de type CRUD, à partir de maquettes HTML préconstruites.

Wicket est un framework web orienté composants, écrit en Java et hébergé par la fondation Apache. Son principe est de manipuler des abstractions de haut niveau (page, formulaire, bouton...) et de séparer clairement logique (en Java pur) et présentation (en HTML pur). Sa forte orientation objet offre des possibilités d'héritage, de polymorphisme et de composition très puissantes et tout à fait novatrices dans le domaine du développement web.
Wicket une alternative à JSF (promu par Sun), et si l'on en croit les speakers, ce framework pourrait bien connaître le même succès qu'Hibernate en son temps face à la norme JDO. Pour avoir un peu manipulé la bête, je confirme qu'il s'agit d'une technologie tout à fait intéressante.

Mais revenons à la présentation.
Celle-ci a commencé par donner quelques sueurs froides aux intervenants, à cause de problèmes de compilation dûs à Maven, vite résolus grâce à l'assistance de Grégory Boissinot heureusement présent ce soir-là.

L'installation de Wicket est simple : un filtre de servlet permet de spécifier la classe d'Application, un singleton qui représente l'application et sa configuration.

En particulier, cette classe d'Application définit la page d'accueil.
Pour la créer, une classe héritant de WebPage est développée. Elle contient un champ de type Label possédant un identifiant unique et un Modèle renvoyant la date courante. Côté HTML, une propriété "wicket:id" est posée sur une simple balise "<span>", afin de l'associer au Label. Après compilation, on constate que le contenu du span est remplacé dynamiquement par la date.

Une problématique courante des applications web est le templating, c'est-à-dire la réutilisation d'une mise en page commune sur les différents écrans composant le site. Wicket propose une solution élégante : les pages étant représentées par des classes de type WebPage, il suffit d'hériter d'une page de base pour hériter également du HTML associé. En pratique, le tag "<wicket:child>" sert à délimiter quelle portion de la page HTML parente sera remplacée par le code spécifique à la page fille.
Pendant la démonstration, de la page d'accueil a été extrait un template qui a ensuite été réutilisé.

Une autre problématique traditionnelle est la gestion de la navigation. Habituellement, un menu permet d'accéder aux différentes pages de l'application ; il faut alors déterminer quelle est la page courante afin de modifier l'apparence de son lien ou le désactiver. Avec Wicket, il suffit de placer le menu au sein d'une balise "<wicket:link>" pour bénéficier automatiquement de ce comportement.

La création de deux nouvelles pages a permis d'illustrer ces fonctionnalités.
La première page (ListeContactsPage) permettait de lister les Contacts disponibles, grâce à un composant PropertyListView permettant d'itérer sur une liste de Contacts et de générer les Labels nécessaires à leur affichage.
La seconde page (EditContactPage) permettait de saisir un nouveau Contact au moyen d'un formulaire. Celui-ci était représenté côté Java par un composant Form associé à un Contact. A la soumission du formulaire, l'objet était automatiquement mis à jour puis sauvegardé dans une liste en mémoire.

Le formulaire de saisie d'un contact a ensuite été amélioré.
Tout d'abord, le mécanisme anti-repost intégré a été mis en évidence. Impossible donc de déclencher accidentellement le même traitement plusieurs fois.
Ensuite, des contraintes de validation ont été ajoutées sur certains champs. Pour les plus simples, il suffit d'appeler des méthodes des composants Java représentant les différents types de champs de saisie (ex: labelPrenom.setRequired(true);). Pour les plus complexes, un système de "Behaviors" autorise la composition de contraintes complexes (ex: labelPrenom.add(StringValidator.MinimumLengthValidator(10));). Mais les behaviors offrent bien plus de possibilités que la simple validation des champs. Ainsi, l'ajout du behavior DatePicker à un champ de saisie est suffisant pour lui associer un calendrier javascript.
Enfin, le support d'Ajax intégré à Wicket a été mis en avant grâce au composant AjaxEditableLabel, qui transforme à la volée un simple label en champ de saisie, modifiant automatiquement le Modèle associé.

Par manque de temps, la fin de l'application n'a pas pu être codée en direct. Heureusement, sa version finale était disponible, et nous avons donc pu bénéficier d'une démonstration de quelques-unes des fonctionnalités les plus puissantes du framework :

  • La modularisation de l'application sous la forme de Panels réutilisables. Contrairement à d'autres frameworks par composants, un Panel Wicket embarque ses propres ressources (code HTML, les images, le code Javascript...) et peut donc être packagé et réutilisé tel quel dans d'autres applications.
  • La gestion du drag'n'drop, qui est implémentée sous la forme de behaviors : il suffit de déclarer des composants Draggable ou DropZone. Dans l'application, il suffisait ainsi d'attraper l'icône d'un Contact et de la lâcher sur le formulaire pour pouvoir l'éditer, les champs étant remplis automatiquement.

Au final, l'application comprenait 13 classes et moins de 200 lignes de code (POJOs compris), développées en moins d'une heure - ce qui est ridicule au regard de la complexité de l'application, et en prenant en compte que l'interaction avec le public freinait le développement.

Cela fait donc de Wicket l'un des frameworks web les plus productifs du moment. Afin de comparer, Zenika a lancé un concours consistant à redévelopper tout ou partie de cette application à l'aide d'autres frameworks, afin de comparer leurs métriques et leur simplicité. Les résultats seront publiés lors du prochain JUG.

Pour finir, sachez que Zenika organisera fin avril une conférence sur Wicket, animée par Martijn Dashorst en personne. Je vous tiens naturellement au courant.

Et ensuite...

Avant le buffet (la buvette, plutôt), des goodies ont été gagnés par des spectateurs ayant répondu correctement à quelques questions simples. Par contre, la Roue Magique n'a pas été lancée (cette fameuse application JavaFX qui tire au sort, selon son humeur, entre 1 et 800 noms à la seconde...).

Je n'ai malheureusement pas pu rester pour la seconde séance sur le web sémantique. Vous en trouverez des compte-rendus sur les sites habituels :

Notes

[1] Au passage, je rappelle que je travaille également chez Zenika


Ajouter un commentaire

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