Wicket - Wie neu laden/aktualisieren von wiederverwendbaren Komponenten korrekt?

  1. Ich habe eine java-Klasse:

    public Task {
    
        private int id;
        private Company sender;
        private Company receiver;
    
        //Getter and Setter
        ...
    }

    Wie Sie sehen können, habe ich 2 andere benutzerdefinierte Klassen, die in der task-Klasse. Und eine Firma hat zum Beispiel die Adresse und das Verzeichnis.

  2. Ich habe eine CompanyPanel die wiederverwendbare werden auf der Seite verwendet. Hier ist ein code aus dem panel.

    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. In der Seite, die ich verwenden reuseable 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. Wenn ich das Formular Absenden ich:

    public void onSubmit(AjaxRequestTarget target, Form<?> form) {
    
        //doSomething
        target.add(senderPanel);
        target.add(receiverPanel);
    
    }

Das problem: Das Unternehmen panel wird nicht gerendert. Und ich weiß wirklich nicht, warum.

Workflow:

  1. Wähle ich ein Unternehmen aus der dropdown-panel
  2. Den Feldern(die im inneren des companyPanel) korrekt eingestellt werden, basierend auf den dropdown -
  3. Ich ein textField ändern (das gehört zu einer Firma)
  4. Ich das Formular abschicken
  5. Ich ändern, das Unternehmen aus der dropdown-Liste
  6. Ich wieder die erste Firma, > PROBLEM: die geänderten Textfeldern angezeigt, noch der geänderte text im inneren. Es war nicht reseten auf default-Werte.

Jede Hilfe sehr geschätzt.

Ich sehen, fügen Sie dieses Bedienfeld, um Ihre form zu. Wann ist die Seite, die zuerst angezeigt wird, dann können Sie sehen, diese Platten ?
Wird die onSubmit-Methode aufgerufen, in den ersten Platz? Wenn es einen validator Schießen die onError-Methode aufgerufen wird, statt.
Was tun Sie in CompanyPanel?
ja, wenn die Seite geladen ist, ich kann sehen, all die Platten
die onSubmit-Methode wird aufgerufen, in den ersten Platz, ja, wenn der Benutzer sich zuvor auf den button

InformationsquelleAutor David Sonnenfeld | 2013-01-29

Schreibe einen Kommentar