2010-10-08 4 views
2

que je dois faire une page web avec Wicket qui expose le tableau suivant:Can Wicket dispose-t-il de menus déroulants AJAXified?

 
+------------+---------+ 
| Category | Value | 
+------------+---------+ 
| CatA | ValA | 
+------------+---------+ 
| CatB | ValB | 
+------------+---------+ 
| CatC | ValC | 
+------------+---------+ 
| CatD | ValD | 
+------------+---------+ 
| CatE | ValE | 
+------------+---------+ 

Chaque élément de cette table, sauf pour les en-têtes est censé être un menu déroulant. Il y a deux problèmes. Premièrement, chaque liste de valeurs dépend de sa liste de catégories. Par exemple, CatA pourrait contenir des «sports», des «voitures» et des «animaux» comme options. Ensuite, si "sports" est sélectionné, ValA est peuplé de "baseball", "football" et "basketball". Mais si "voitures" est sélectionné, ValA serait plutôt peuplé avec "Volvo", "Saab" et "Mercedes".

L'autre problème est que les lignes ne doivent apparaître que si les lignes au-dessus d'elles sont remplies. Ainsi, lorsque la page est chargée, seuls CatA et ValA doivent être visibles. Une fois que ValA est rempli, CatB et ValB deviennent visibles. Si ValB est rempli, CatC et ValC apparaissent, & c.

Ma question est la suivante: cela peut-il être réalisé en Wicket pur, de préférence de manière asynchrone? J'ai regardé à travers l'API Wicket, mais je ne suis pas trop familier avec elle, donc je pourrais facilement avoir raté la classe qui fait ce que je veux. Ma première pensée impliqué en utilisant DropDownChoice et sa méthode onSelectionChanged(), mais cela ne semble pas être AJAXified.

S'il n'y a absolument aucun moyen que cela se produise juste avec Wicket, je envisagerais d'utiliser JavaScript, mais c'est vraiment un dernier recours.

Je n'ai pas nécessairement besoin du code — cela pourrait même ne pas fonctionner, puisque cela est vraiment dépouillé de mes exigences actuelles du projet — mais j'apprécierais d'être pointé vers une classe API utile ou une implémentation existante ou similaire .

Edit:
D'accord, la réponse de donroby fonctionnait très bien pour la première partie (ce qui valeurs dépendent des catégories) mais je suis toujours perdu sur la deuxième partie (lignes cacher jusqu'à ce que toutes les lignes précédentes sont remplies). Au début, je pensais que cela pourrait être accompli en attachant LoadableDetachableModel s, mais je me rends maintenant compte que ce n'est pas ce que ceux-ci font. Y at-il un moyen de basculer si un composant est sur la page du tout?

Répondre

0

Une partie de l'exemple de code au Wicket Ajax examples peut être utile, en particulier le Drop Down Choice Example.

Vous pouvez certainement faire ce genre de chose dans Wicket en attachant des comportements Ajax et de minimiser la quantité de JavaScript que vous avez à écrire vous-même afin de l'accomplir.

+0

Yeesh. Je suis déjà allé sur ce site, mais j'ai manqué cet exemple précis d'une manière ou d'une autre. Ça promet, je vais essayer. – Pops

0

Fonctionne avec le portillon et Ajax. Lors de la création d'une cellule de tableau, vous devez créer un panneau de guichet qui contient ce DropDownChoice. Si vous devez mettre à jour les valeurs, vous devez mettre à jour les valeurs du modèle de liste déroulante et exécuter un composant target.addComponent (DropDownChoice), où target est un AjaxRequestTarget. En outre, le choix de la liste déroulante doit avoir setOutputMarkupId défini sur true pour pouvoir être mis à jour. Je pense que je peux vous aider avec du code si vous en avez besoin.

0

On dirait que la réponse à la deuxième partie a trait à l'appel de la méthode setVisible() héritée de Component au bon moment. Je vais quand même donner à donroby la réponse acceptée.

Questions connexes