Pour ce 3ème article nous allons gérer le clic sur les onglets ainsi que le rafraichissement du panel de contenu.

Avant tout, on change un peu le code en ajoutant un WebMarkupContainer qui contiendra notre panel correspondant à l’onglet cliqué :

public class PageEtape3 extends TemplatePage {
  private WebMarkupContainer contentContainer;
 
  public PageEtape3() {
    super();
    ...
 
    // Panel du contenu
    contentContainer = new WebMarkupContainer("contentContainer");
    contentContainer.setOutputMarkupId(true);
    contentContainer.add(new PanelGenerique("content", "panel 3 Salarié"));
    add(contentContainer);
  }
}

avec le code html correspondant :

<div id="content" wicket:id="contentContainer">
  <div wicket:id="content"></div>
</div>


Ensuite, on reprend le code de notre ListView de l’étape 2, et on ajoute un AjaxLink :

ListView<String> onglets = new ListView<String>("onglet", listTitresOnglets) {
  @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) {
        // Content
        WebMarkupContainer newContentContainer = new WebMarkupContainer("contentContainer");
        newContentContainer.setOutputMarkupId(true);
        newContentContainer.add(new PanelGenerique("content", "panel 3 " + _item.getModelObject()));
        contentContainer.replaceWith(newContentContainer);
        contentContainer = newContentContainer;
        target.addComponent(newContentContainer);
      }
    };
    Label labelOnglet = new Label("labelOnglet", libelle);
    linkOnglet.add(labelOnglet);
    _item.add(linkOnglet);
  }
};

Ce que l’on fait dans le code du onClick c’est de remplacer le panel de contenu (nommé contentContainer) par celui correspondant à l’onglet cliqué (bon ici c’est juste un panel générique, mais le principe reste le même).

Ensemble du code de cette étape

Ce qui nous donne le code java complet suivant :

public class PageEtape3 extends TemplatePage {
  private WebMarkupContainer contentContainer;
 
  public PageEtape3() {
    super();
    initPageTitle("Etape 3");
 
    // Repeater des onglets
    List<String> listTitresOnglets = Arrays.asList(new String[] { "Salarié", "Contrat", "Planning" });
    ListView<String> onglets = new ListView<String>("onglet", listTitresOnglets) {
      private static final long serialVersionUID = 6207330868467140651L;
 
      @Override
      protected void populateItem(final ListItem<String> _item) {
        String libelle = _item.getModelObject();
        AjaxLink<Object> linkOnglet = new AjaxLink<Object>("linkOnglet") {
          private static final long serialVersionUID = 8616644389430286913L;
 
          @Override
          public void onClick(AjaxRequestTarget target) {
            // Content
            WebMarkupContainer newContentContainer = new WebMarkupContainer("contentContainer");
            newContentContainer.setOutputMarkupId(true);
            newContentContainer.add(new PanelGenerique("content", "panel 3 " + _item.getModelObject()));
            contentContainer.replaceWith(newContentContainer);
            contentContainer = newContentContainer;
            target.addComponent(newContentContainer);
          }
        };
        Label labelOnglet = new Label("labelOnglet", libelle);
        linkOnglet.add(labelOnglet);
        _item.add(linkOnglet);
      }
    };
    add(onglets);
 
    // Panel du contenu
    contentContainer = new WebMarkupContainer("contentContainer");
    contentContainer.setOutputMarkupId(true);
    contentContainer.add(new PanelGenerique("content", "panel 3 Salarié"));
    add(contentContainer);
  }
}

et le Html :

<div id="menu">
  <ul class="onglets">
    <li wicket:id="onglet"><a wicket:id="linkOnglet"><span wicket:id="labelOnglet">[labelOnglet]</span></a></li>
  </ul>
  <div class="clear"></div>
</div>
<div id="content" wicket:id="contentContainer">
  <div wicket:id="content"></div>
</div>

Désormais, quand on clic sur l’onglet, le panel de contenu se met a jour (via ajax), par contre il pourrait être interessant de signifier à l’utilisateur quel onglet est actif.

Ce sera le but du 4ème épisode… Amusons nous avec Wicket & Ajax : Onglets dynamiques 4/5

Imprimer cet article Imprimer cet article

 Leave a Reply

(required)

(required)


× 3 = nine

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