Nouvelles releases Wicket : 1.4.10 et 1.5-M1


La dixième release de la branche 1.4 vient de sortir officiellement
Cette nouvelle version corrige une trentaine de bugs.

Elle apporte également deux nouvelles méthodes dans le cycle de vie d'un composant pour simplifier son initialisation et sa configuration.

  1. public class Component {
  2. ...
  3. protected void onInitialize() {}
  4. protected void onConfigure() {}
  5. ...
  6. }

Vous pouvez d'ores et déjà la récupérer en mettant à jour vos POM :

  1. <dependency>
  2. <groupId>org.apache.wicket</groupId>
  3. <artifactId>wicket</artifactId>
  4. <version>1.4.10</version>
  5. </dependency>

Le premier milestone de la branche 1.5 est également disponible. Attention cette release n'est pas encore annoncée prête pour la production. Elle est pour l'instant à l'état de démo en attente des retours des utilisateurs.

Vous pouvez également la récupérer en mettant à jour vos POM :

  1. <dependency>
  2. <groupId>org.apache.wicket</groupId>
  3. <artifactId>wicket</artifactId>
  4. <version>1.5-M1</version>
  5. </dependency>

Cette version apporte plusieurs modifications pouvant nécessiter une migration de votre code 1.4.x. Au passage toutes les méthodes deprecated ont été supprimées.

Gestion des listes avec les Repeaters suite


Ce billet fait suite au précédent billet sur les Repeaters. Vous en voulez plus ? Un composant facile à utiliser ? Des colonnes triables ? Tout ça en ajax ? Et bien Wicket le fait.

Lire la suite...

Gestion des listes avec les Repeaters


Pour gérer l'affichage des listes, Wicket propose le mécanisme des repeaters, comme nous l'avons vu dans le billet ZenContact 6.

En plus de la ListView qui permet de répéter facilement un markup pour chaque élément d'une liste, Wicket propose des repeaters plus avancés, que je vais vous présenter en suivant leur hiérarchie de classes. Nous allons aussi voir comment les utiliser pour remplacer la ListView utilisée dans ZenContact.

Lire la suite...

Intégration Wicket et Guice : une nouvelle approche


Vous trouverez dans ce billet une nouvelle approche pour intégrer Guice et Wicket.

L'auteur du blog propose d'exploiter la fonctionnalité des ServletModules de Guice pour déporter la configuration du WicketFilter. Cette approche permet ainsi de déclarer et configurer le WicketFilter en Java plutôt que dans le fichier web.xml.

Remplacer un Panel Wicket en Ajax


Le moteur Ajax intégré dans le framework Wicket est à la fois puissant et très simple d'utilisation. Nous allons voir dans ce billet comment utiliser les fonctionnalités Ajax de Wicket pour remplacer dynamiquement un panel dans une page.

Lire la suite...

Upload de fichier avec Wicket


Dans ce billet nous allons voir comment gérer un formulaire d'Upload avec Wicket. Pour l'exemple nous allons ajouter une fonctionnalité d'upload d'image au formulaire de contact de l'application ZenContact.

Lire la suite...

Comment rendre ses fichiers Javascript ou CSS dynamiques avec Wicket


Si vous avez l'habitude de rajouter des fichiers Javascript ou CSS à vos pages depuis vos composants Wicket, vous avez sûrement déjà utilisé la méthode getHeaderContribution :

  1. add(JavascriptPackageResource.getHeaderContribution(MyComponent.class, "js/MyComponent.js"));

Ou encore, sur les anciennes version de Wicket :

  1. add(HeaderContributor.forJavaScript(MyComponent.class, "MyComponent.js");

Cependant, les fichiers Javascript (ou CSS) sont ajoutés tel quels. Nous allons voir ici comment personnaliser ces fichiers, en rajoutant des variables à nos fichiers initialement statiques.

Nous allons pour cela utiliser un TextTemplateHeaderContributor à la place de notre HeaderContributor, en passant un modèle contenant la liste de nos variables.

  1. IModel<Map<String, Object>> variablesModel = new AbstractReadOnlyModel<Map<String, Object>>() {
  2.  
  3. private Map<String, Object> variables;
  4.  
  5. public Map<String, Object> getObject() {
  6. if (variables == null) {
  7. this.variables = new MiniMap<String, Object>(3);
  8. variables.put("markupId", MyComponent.this.getMarkupId() );
  9. variables.put("height", calculateHeight() );
  10. variables.put("width", calculateWidth() );
  11. }
  12. return variables;
  13. }
  14.  
  15.  
  16. };
  17.  
  18. add(TextTemplateHeaderContributor.forJavaScript(MyComponent.class, "js/MyComponent.js", variablesModel));

Ensuite, il est facile de récupérer la valeur de nos variables dans notre fichier Javascript :

  1. $(function() {
  2. $("#${markupId}").dialog({
  3. height: ${height},
  4. width: ${width}
  5. });
  6. });

Nous verrons un cas d'application avec les templates Javascript et JQuery dans un prochain article.

Gérer facilement les fenêtres modales avec Wicket


Le framework web Wicket fournit un composant ModalWindow permettant de gérer des fenêtres modales.
Dans cet article, nous verrons comment le mettre en oeuvre, au travers de cas d'utilisation de plus en plus complexes.

Lire la suite...

Wicket Components Listeners


L'API de Wicket propose une série de listeners capables d'intercepter certains évènements relatifs aux Components.

  • IComponentInstantiationListener : appelé pendant la construction des Components
  • IComponentOnBeforeRenderListener : appelé avant le rendu complet des composants sur la page
  • IComponentOnAfterRenderListener : appelé juste après que le composant ait été rendu sur la page

Ce comportement est issue du pattern Observer/Observable. Ici, les objets "sujets/observables" sont les Components et l'observateur est l'application elle même.

Voyons comment intégrer ces listeners dans une application ainsi que quelques cas d'utilisation.

Lire la suite...

ZenContact 15 : Drag and Drop avec Wicket et Script.aculo.us


Dans ce billet nous allons voir comment ajouter la fonctionnalité "drag and drop" afin de faciliter davantage l'édition de contacts.

Voici ce que nous souhaitons obtenir :

  • avoir la possibilité de déplacer un contact présent dans la liste de contacts vers le formulaire d'édition, afin de pré-remplir les champs de ce dernier avec les infos du contact correspondant.
Lire la suite...

- page 1 de 5