2010-08-31 20 views
0

J'utilise le plugin jsTree jQuery pour tracer un arbre. Lorsque l'utilisateur clique sur un nœud, une requête ajax contenant l'identifiant du nœud est envoyée au serveur.Wicket + jsTree, génération de liens dans la réponse ajax

Dans ma réponse je générant tel morceau de html (cela se fait dans servlet séparée):

<li id="node_id_1"><a href="foobar">Child item 1</a></li> 
<li id="node_id_2"><a href="foobar">Child item 2</a></li> 
<li id="node_id_3"><a href="foobar">Child item 3</a></li> 
<li id="node_id_4"><a href="foobar">Child item 4</a></li> 
<li id="node_id_5"><a href="foobar">Child item 5</a></li> 

Et ces éléments sont dessinés sous le noeud sélectionné.

La question est: quelle valeur dois-je utiliser pour l'attribut href pour référencer des pages de portillon? C'est à dire. J'ai besoin de liens pointant vers la classe MainPage avec quelques paramètres.

Répondre

1

Ce que vous voulez est un RepeatingView ou ListView qui retourne quelques BookmarkablePageLink objets:

Voici un composant de l'échantillon:

public class JsTree extends Panel{ 

    private static final long serialVersionUID = 1L; 

    public JsTree(final String id, final IModel<List<MyDomainObject>> model){ 
     super(id); 
     this.add(new ListView<MyDomainObject>("list", model){ 

      private static final long serialVersionUID = 1L; 

      @Override 
      protected void populateItem(final ListItem<MyDomainObject> item){ 
       MyDomainObject modelObject = item.getModelObject(); 
       final Map<String, String> params = 
        Collections.singletonMap("id", modelObject 
         .getObjectId()); 
       item.add(
        new BookmarkablePageLink<Void>(
         "link", MyPage.class, 
         new PageParameters(params) 
        ).add(new Label("label",modelObject.getName())) 
       ).setOutputMarkupId(true); 

      } 
     }); 
    } 
} 

Et le code HTML correspondant:

<html> 
<body> 
<wicket:head></wicket:head> 
<wicket:panel> 
    <ul class="jsTree"> 
     <li wicket:id="list"> 
      <a href="#" wicket:id="link"> 
       <wicket:container wicket:id="label" /> 
      </a> 
     </li> 
    </ul> 
</wicket:panel> 
</body> 
</html> 

J'ai utilisé un type MyDomainObject qui a juste un identifiant et un nom. Le nom est affiché, l'identifiant est lié à. Fondamentalement, vous pouvez ajouter un paramètre sérialisable à un BookmarkablePageLink, puis analyser le paramètre de la page que vous liez à l'aide de la méthode Page.getPageParameters().