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 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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
