Nouvelle release Wicket : 6.0.0-beta1


La première release de la branche 6 en version beta vient de sortir

Cette nouvelle version apporte une dizaine de nouveautés.

Notamment l'utilisation de la librairie JQuery pour remplacer le moteur Ajax interne (wicket-ajax.js).

Cette release apporte quelques modifications pouvant nécessiter une migration de votre code 1.5.x.

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

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>6.0.0-beta1</version>
</dependency>

Wicket Component Debug


Lors d’un audit, d’une revue de code, ou simplement lors de la maintenance d’un projet Wicket, il est parfois difficile d'obtenir une vision claire des composants qui constituent une page.

Afin de résoudre ce problème, je vous propose un outil permettant de visualiser, directement dans votre navigateur, les différents composants présents sur votre page. Les composants sont représentés sous la forme d’un arbre permettant de comprendre leur hiérarchie.

Lire la suite...

Cas d'utilisation d'un évènement avec Ajax


Dans cet article, nous allons reprendre l'exemple fait avec ZenContact dans l'article précédent en ajoutant cette fois ci un peu d'Ajax dans notre application.

Lire la suite...

Gestion des évènements (Wicket 1.5+)


Wicket supporte les événements !

Depuis la version 1.5, il est désormais possible d'utiliser un mécanisme d’événements pour faire communiquer différents composants de l'application. Grâce à une API simple, il est désormais possible à n'importe quel composant Wicket d’émettre ou de recevoir un événement, quelle que soit sa position dans l'arbre des composants.

Quel besoin avons nous en Wicket d'un tel mécanisme d’événements ?

Lire la suite...

Wicket 1.5.1 released


La première release de la branche 1.5 est maintenant disponible

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

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>1.5.1</version>
</dependency>

Sortie officielle de Wicket 1.5


C'est officiel, la release 1.5 de Wicket est sortie aujourd'hui!

Vous pouvez la télécharger ici.

Ou plus directement en mettant à jour vos POM :

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>1.5.0</version>
</dependency>

Il faudra également mettre à jour les autres modules wicket : wicket-extensions, wicket-ioc, wicket-spring,...

Vous pouvez retrouver tous les détails de cette release ici, mais voici quelques exemples :

  • Intégration de nouveaux composants compatibles HTML5 (EmailTextField, NumberTextField, UrlTextField and RangeTextField)
  • Un mécanisme d'événement inter-composant intégré directement dans le framework.
  • Simplification de la gestion du RequestCycle.
  • Meilleure gestion des pages accessibles uniquement en HTTPS (il suffit maintenant d'ajouter l'annotation @RequireHttps sur la page)

Un guide de migration est disponible pour vous aider à intégrer toutes ces nouvelles fonctionnalités.

Behavior qui affiche une info-bulle sur un bouton 'disabled'


Quoi de plus normal que d'afficher par une info-bulle la raison pour laquelle un bouton (ou autre : case à cocher, ...) n'est pas cliquable ?

<input type="button" name="valider" disabled="disabled" value="Valider"></input>

Problématique


Et bien force est de constater le comportement n'est pas celui-attendu sous Firefox ! Ce dernier n'affiche pas l'info-bulle !

Vous pouvez le vérifier ci-dessous ou ici

Solution


En pensant d'abord aux utilisateurs, j'ai cherché une solution de contournement, et il s'avère qu'afficher par dessus le bouton une div transparente avec l'info-bulle corrige notre problème.

Voici le résultat :

<div class="zindex-tips-container">
<div class="zindex-tips-label" title="Vous n'avez pas les droits d'effectuer cette action"></div>
    <input type="button" name="valider" disabled="disabled" value="Valider"></input>
</div>

Et le css associé :

.zindex-tips-container {
    height: 100%;
    position: relative;
    width: 100%;
}
.zindex-tips-label {
    background: transparent;
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    top: 0;
    z-index: 10;
}

Voici le résultat (lien) :

Il faut tout de même faire attention, car la superposition de la div bloque tous les événements, comme le clic avec la souris sur un bouton actif.

Maintenant faisons cela en Wicket :)

Implémentation dans Wicket


La mise en place est assez simple, il faut créer un behavior qui va ajouter le code html correspondant, et je vais donc directement vous donner le code correspondant :

public class ZindexTooltipBehavior extends AbstractBehavior {
 
	private StringResourceModel tooltip;
 
	public ZindexTooltipBehavior(StringResourceModel tooltip) {
		this.tooltip = tooltip;
	}
 
	@Override
	public void beforeRender(Component component) {
		super.beforeRender(component);
		Response response = component.getResponse();
		response.println("<div class=\"zindex-tips-container\">");
		response.println("<div class=\"zindex-tips-label\" title=\""+tooltip.getString()+"\"></div>");
 
	}
	@Override
	public void onRendered(Component component) {
		Response response = component.getResponse();
		super.onRendered(component);
		response.println("</div>");
	}
 
	public void setTooltip(StringResourceModel tooltip) {
		this.tooltip = tooltip;
	}
 
}

On remarque ici comment ajouter du contenu HTML avec les méthodes beforeRender et onRendered.

Ensuite, il faut ajouter le CSS correspondant dans la feuille de style de votre application ou directement dans le behavior grâce au code add(CSSPackageResource.getHeaderContribution(this.getClass(),"zindexTooltip.css")); .

Et voici un exemple d'utilisation sur une checkbox :

add(new Check<MonModel>("checkbox", model){
			@Override
			protected void onInitialize() {
				super.onInitialize();
				//On ajoute un zindex tooltip si la case est désactivée
				add(new ZindexTooltipBehavior(new StringResourceModel("button.action.forbidden.role")){
					@Override
					public boolean isEnabled(Component component) {
						return !isCheckboxEnabled();
					}
				});
			}
			@Override
			public boolean isEnabled() {
				return isCheckboxEnabled();
			}
 
			protected boolean isCheckboxEnabled() {
				return false; //Condition à implémenter
			}
		});

Voilà, c'est une astuce toute simple, mais qui montre la puissance d'utilisation des behaviors Wicket.

C'est nos utilisateurs qui vont être contents !

Les dernières releases Wicket


La septième release candidate de la branche 1.5 est maintenant disponible

Vous pouvez dès à présent la récupérer en mettant à jour vos POM :

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>1.5-RC7</version>
</dependency>

Pour la branche 1.4 la release 1.4.18 est disponible :

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket</artifactId>
    <version>1.4.18</version>
</dependency>

Proposition d'architecture générique avec Hibernate, Spring et Wicket


Aujourd'hui, je vous présente une architecture permettant d'obtenir des modèles Wicket totalement génériques s'appuyant de manière transparente sur des DAO Hibernate.

Cette intégration "back to front", s'appuyant sur les types génériques Java, couvre 80% des cas d'utilisation standard des modèles Wicket et permet de simplifier le code des pages.

Analyse du besoin

Dans la plupart des cas, nos modèles Wicket remplissent l'une des 3 fonctions suivantes :

  • Récupérer une entité métier par son ID
  • Récupérer une liste d'entités métiers, optionnellement triée (pour affichage simple)
  • Récupérer une liste d'entités métiers, optionnellement triée et/ou paginée (pour les DataTable)
Lire la suite...

Les dernières releases Wicket


La deuxième release candidate de la branche 1.5 est maintenant disponible

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.5-RC2</version>
  5. </dependency>

Pour la branche 1.4 la release 1.4.16 est disponible :

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

- page 1 de 7