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 Imprimer cet article

  5 Responses to “Onglets Dynamiques : Etape 7 – Corrections”

  1. [...] 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 [...]

  2. 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.

  3. 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 !

  4. Merci nico pour le lien ;)

  5. 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.)

 Leave a Reply

(required)

(required)


nine − 7 =

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

   
© 2011 NooCodeCommit Suffusion theme by Sayontan Sinha