2010-10-13 8 views
0

Je voudrais savoir comment mettre à jour un panneau lorsque nous sélectionnons une valeur de chioce déroulante, qui est dans la méthode onUpdate().Comment mettre à jour un panneau lorsque l'utilisateur sélectionne un menu déroulant dans Wicket?

Mon panneau personnalisé a AjaxFallbackDefaultDataTable. Ci-dessous, le code des composants du panneau et des composants déroulants. Lorsque l'utilisateur sélectionne la date, je souhaite remplacer l'ensemble de mon Panel. Actuellement j'ai commenté ce code target.addComponent, mais je veux avoir l'implémentation ici. Aucune suggestion?

List<DealHistory> dealHistoryList = ServicesCaller 
      .getAllDealHistoryRecords(); 
    DealHistoryTablePanel dealHistoryTablePanel = new DealHistoryTablePanel(
      "deal_history_table_panel", dealHistoryList); 
    dealHistoryTablePanel.setOutputMarkupId(true); 

    add(dealHistoryTablePanel); 

    IModel<List<? extends String>> dateChoices = new AbstractReadOnlyModel<List<? extends String>>() { 
     @Override 
     public List<String> getObject() { 
      List<String> list = new ArrayList<String>(); 
      list.add("Last 3 months"); 
      list.add("Last 6 months"); 
      return list; 
     } 
    }; 

    final DropDownChoice<String> datesDropDown = new DropDownChoice<String>(
      "dates", new PropertyModel<String>(this, "selectedDate"), 
      dateChoices); 
    datesDropDown.add(new AjaxFormComponentUpdatingBehavior("onchange") { 
     @Override 
     protected void onUpdate(AjaxRequestTarget target) { 
      //target.addComponent(dealHistoryTablePanel); 
     } 
    }); 
    add(datesDropDown); 
+0

Je pense que vous devriez accepter la réponse de Don Roby si cela vous a aidé. –

Répondre

1

Vous êtes définitivement sur la bonne voie. La chose fondamentale qui y arriver est d'avoir la

target.addComponent(dealHistoryTablePanel); 

exactement où vous l'avez, dans un AjaxFormComponentUpdatingBehavior.

Vous aurez probablement aussi envie de changer le modèle dans votre DealHistoryTablePanel, probablement en remplaçant la liste qu'il contient par celle obtenue par un appel différent à votre service. Pour dire quelque chose de plus explicite, je devrais voir le code pour DealHistoryTablePanel.

Un example montrant la mise à jour d'un DropDownChoice après que la sélection d'un soit instructif, bien que bien sûr le composant qu'il met à jour soit différent.

+0

J'ai trouvé le problème, maintenant il fonctionne comme prévu. Mais je vois un autre problème avec le message de la barre de navigation et les chiffres qu'il montre. La première fois que je charge la page, elle montre "montrant 1 à 10 sur 50", maintenant j'ai cliqué sur le lien flèche suivante et montre "montrant 11 à 20 sur 50". Après cela, j'ai changé mon chioce déroulant pour obtenir une autre liste de la base de données. Je m'attends à ce que ma table affiche "montrant 1 à 10 sur 50", mais à la place, il montre "montrant 11 à 20 sur 50" (c'est le dernier message affiché avant de changer de liste déroulante). Comment résoudre ce problème? – jgg

+0

@goutham: Il est probable que certaines données de pagination dans le mécanisme de table que vous utilisez doivent être réinitialisées lorsque vous modifiez des listes. Postez votre code DealHistoryTablePanel et je pourrais être en mesure d'aider. –

+0

J'ai trouvé la solution pour cela. C'est-à-dire, appeler table.setCurrentPage (0); après le changement de valeur déroulant. Merci quand même pour regarder ça. – jgg

Questions connexes