Wicket - Comment rafraîchir composants réutilisables correctement?

  1. J'ai une classe java:
    public Task {
    
        private int id;
        private Company sender;
        private Company receiver;
    
        //Getter and Setter
        ...
    }

    Comme vous pouvez le voir, j'ai 2 autres classes personnalisées dans la classe de tâche. Et l'entreprise a, par exemple, l'Adresse et le Répertoire.

  2. J'ai un CompanyPanel qui sera réutilisable être utilisées sur la Page. Voici un peu de code à partir du panneau.
    public class CompanyPanel extends Panel {
    
        protected List<Company> companies;
    
        public CompanyPanel(String id, IModel<Company> model) {
    
        super(id,new CompoundPropertyModel<Company>(model));
        companies = new ArrayList<Company>();
    
        Company company_1 = new Company();
            //Setting default predefined values for the company, so I can select it from the dropdown and to set fields automatically
    
        company_1.setFtpAdress("adress1.com");
        company_1.setFtpDir("/MusterDir/");
        companies.add(company_1);
    
        //SAME for another company
                ...
        companies.add(comany_2);
                ...
    
        final DropDownChoice<Company> companyList = new DropDownChoice<Company>("companies", model,
            new LoadableDetachableModel<List<Company>>() {
        @Override
        protected List<Company> load() { 
            return companies;
        }
        }){
            protected boolean wantOnSelectionChangedNotifications() {
            return true;
            }
        };
        add(companyList);
    
        final TextField<String> ftpAdress = new TextField<String>("ftpAdress");
        ftpAdress.setOutputMarkupId(true);
        add(ftpAdress);
    
        final TextField<String> ftpDir = new TextField<String>("ftpDir");
        ftpDir.setOutputMarkupId(true);
        add(ftpDir);
    
         //added Ajax to dropdown to update textfields automatically, based on selection of dropdown
        companyList.add(new AjaxFormComponentUpdatingBehavior("onchange")
        {
        @Override
        protected void onUpdate(AjaxRequestTarget target)
        {
            target.add(ftpAdress);
            target.add(ftpDir);
        }
        });
      }
    }
  3. Dans la Page-je utiliser réutilisables CompanyPanels.
    ...
    CompanyPanel senderPanel = new CompanyPanel("senderPanel", new PropertyModel(task,"sender"));
    senderPanel.setOutputMarkupId(true);
    form.add(senderPanel);
    
    CompanyPanel receiverPanel = new CompanyPanel("receiverPanel", new PropertyModel(task,"receiver"));
    receiverPanel.setOutputMarkupId(true);
    form.add(receiverPanel);
    ...
  4. Quand je soumettre le formulaire je fais:
    public void onSubmit(AjaxRequestTarget target, Form<?> form) {
    
        //doSomething
        target.add(senderPanel);
        target.add(receiverPanel);
    
    }

Le problème: La société n'est pas d'être réaffichées. Et je ne sais pas vraiment pourquoi.

Flux de travail:

  1. J'sélectionnez une entreprise dans la liste déroulante du panneau
  2. Les objets textfield(qui sont à l'intérieur de la companyPanel) sera réglée correctement, basé sur la liste déroulante
  3. - Je modifier un textField (qui appartient à une société)
  4. - Je soumettre le formulaire
  5. - Je changer la société à partir de la liste déroulante
  6. Je revenir à la première compagnie -> PROBLÈME: la modification de textfields affiche toujours le texte modifié de l'intérieur. Il n'a pas été réinitialisées aux valeurs par défaut.

Toute aide très appréciée.

Je vois que vous l'ajouter à votre formulaire de trop. Lorsque la page est tout d'abord affiche ensuite, vous pouvez voir ce panneau ?
Est le onSubmit méthode appelée en premier lieu? Si il y a un validateur de tir la onError méthode est appelée à la place.
Que faites-vous dans CompanyPanel?
oui, lorsque la page est chargée, je peux voir tous les panneaux
le onSubmit méthode est appelée en premier lieu, oui, lorsque l'utilisateur appuie sur le bouton

OriginalL'auteur David Sonnenfeld | 2013-01-29