Après avoir découvert le site Wicket By Example, réalisé par les gars de chez Mystic Coders, j’ai découvert comment améliorer le code de l’étape 7.
En effet, dans cette étape j’ai opté pour créer ma propre classe OngletAjaxLink pour avoir la main sur la déclaration de l’évennement onclick. C’était avant que je découvre l’article Adding Javascript confirm dialog to AjaxButton.
Donc, exit la classe OngletAjaxLink. On revient au code de l’étape 6 pour PanelOnglets c’est à dire :
public class PanelOnglets extends Panel { private WebMarkupContainer ongletsContainer; private CompoundPropertyModel<OngletsModelObject> ongletsModel; public PanelOnglets(String _id, CompoundPropertyModel<OngletsModelObject> _ongletsModel) { super(_id); // CSS add(CSSPackageResource.getHeaderContribution(this.getClass(), this.getClass().getSimpleName() + ".css")); this.ongletsModel = _ongletsModel; // Repeater des onglets ListView<String> onglets = new ListView<String>("onglet", ongletsModel.getObject().getListOnglets()) { @Override protected void populateItem(final ListItem<String> _item) { String libelle = _item.getModelObject(); AjaxLink<Object> linkOnglet = new AjaxLink<Object>("linkOnglet") { @Override public void onClick(AjaxRequestTarget target) { ... } } }; Label labelOnglet = new Label("labelOnglet", libelle); linkOnglet.add(labelOnglet); _item.add(linkOnglet); } ... } }
Et on redéfinit la méthode IAjaxCallDecorator getAjaxCallDecorator() de l’objet AjaxLink qui nous permet de décorer le script initial avec du code javascript (via la méthode preDecorateScript). ce qui nous donne :
public class PanelOnglets extends Panel { private WebMarkupContainer ongletsContainer; private CompoundPropertyModel<OngletsModelObject> ongletsModel; public PanelOnglets(String _id, CompoundPropertyModel<OngletsModelObject> _ongletsModel) { super(_id); // CSS add(CSSPackageResource.getHeaderContribution(this.getClass(), this.getClass().getSimpleName() + ".css")); this.ongletsModel = _ongletsModel; // Repeater des onglets ListView<String> onglets = new ListView<String>("onglet", ongletsModel.getObject().getListOnglets()) { @Override protected void populateItem(final ListItem<String> _item) { String libelle = _item.getModelObject(); AjaxLink<Object> linkOnglet = new AjaxLink<Object>("linkOnglet") { @Override protected IAjaxCallDecorator getAjaxCallDecorator() { return new AjaxPreprocessingCallDecorator(super.getAjaxCallDecorator()) { @Override public CharSequence preDecorateScript(CharSequence script) { return "updateOnglet(" + _item.getIndex() + ");" + script; } }; } @Override public void onClick(AjaxRequestTarget target) { ... } } }; Label labelOnglet = new Label("labelOnglet", libelle); linkOnglet.add(labelOnglet); _item.add(linkOnglet); } ... } }
Voilà, le code source est donc plus cohérent et utilise pleinement les capacités du Framework!
Comme quoi en fouillant un peu, on arrive toujours à améliorer son code!
Une fois de plus, j’ai mis à jour le résultat étape par étape et voilà le code source qui remplace celui de l’étape 7 initiale (sous la forme d’un projet Eclipse, il vous faudra aussi maven pour la gestion des dépendances).
Imprimer cet article


[...] Encore une fois, j’ai mis à jour le résultat étape par étape et voilà le code source (sous la forme d’un projet Eclipse, il vous faudra aussi maven pour la gestion des dépendances). voir les corrections dans l’article : Onglets Dynamiques : Etape 7 – Corrections [...]
C’est super d’avoir un exemple complet comme celui ci!
Au cas où ça intéresse quelqu’un j’ai créé un petit tuto sur la gestion des exceptions et l’affichage des messages d’erreur avec wicket sur mon blog.
Ah ben carrément Loic !
Je me permet de mettre l’url de l’article directement : http://dev-coffeebean.blogspot.com/2009/08/wicket-gestion-des-erreurs.html
N’hésitez pas à aller voir, on y apprend plein de choses !
Merci nico pour le lien
Merci pour le tuto,
C’est exactement ce que je cherchais à faire (des tabs ajax avec wicket). J’essaie Wicket et pour le moment je trouve ça assez plaisant.
Juste une remarque concernant l’archive : il manque les codes sources pour les étapes 7 et 8 dans java/main/resources/. (En l’état ça provoque une exception quand on clique sur les liens de ces 2 étapes.)