2012-07-23 16 views
10

Ich möchte den Inhalt einer DataTable abhängig vom Inhalt eines Formulars ändern (denken Sie an es als Suchleiste Funktionalität). Ich habe das in Wicket 1.5.x gemacht, aber ich kann es nicht in Wicket 6.0.0-Beta2 funktionieren lassen. Es scheint nicht in der OnSubmit-Methode des AjaxButton einzugeben. Alles andere funktioniert gut, alle Komponenten werden korrekt gerendert und die DataTable wird beim Laden der Seite mit den korrekten Daten gefüllt, aber wenn ich auf die Schaltfläche klicke, passiert nichts.Wicket 6.0.0-beta2 Aktualisieren von Inhalt von DataTable beim Absenden eines Formulars mit AjaxButton

Jede Hilfe würde sehr geschätzt werden. Hier ist, was mein Code wie folgt aussehen:

Datatable:

public SubscriberPage(PageParameters parameters) { 
super(parameters); 
add(new SearchForm("searchForm")); 

List<IColumn<Subscriber, String>> columns = new ArrayList<IColumn<Subscriber, String>>(); 
columns.add(new PropertyColumn<Subscriber, String>(new Model<String>("Telephone Number"), 
                "tn", 
                "tn")); 
[...] 
columns.add(new PropertyColumn<Subscriber, String>(new Model<String>("Initialized MB"), 
                "initializedMB")); 

table = new AjaxFallbackDefaultDataTable<Subscriber, String>("table", 
                  columns, 
                  subscriberDataProvider, 
                  40); 
table.setOutputMarkupId(true); 
add(table); 
} 

und hier ist die Form mit dem AjaxButton:

private class SearchForm extends Form<String> { 
private static final long serialVersionUID = 1L; 

private String tnModel; 
private Label tnLabel = new Label("tnLabel", "Telephone Number :"); 
private TextField<String> tn; 

public SearchForm(String id) { 
    super(id); 
    tn = new TextField<String>("tnTextField", new PropertyModel<String>(this, "tnModel")); 
    tn.setOutputMarkupId(true); 
    add(tnLabel); 
    add(tn); 

    AjaxButton lSearchButton = new AjaxButton("searchButton") { 
    private static final long serialVersionUID = 1L; 

    @Override 
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
     SubscriberFilter filter = new SubscriberFilter(); 
     target.add(table); 
     if (!(tn.getValue() == null) && !tn.getValue().isEmpty()) { 
     filter.setTn(tn.getValue()); 
     } 
     // giving the new filter to the dataProvider 
     subscriberDataProvider.setFilterState(filter); 
    } 

    @Override 
    protected void onError(AjaxRequestTarget target, Form<?> form) { 
     // TODO Implement onError(..) 
     throw new UnsupportedOperationException("Not yet implemented."); 
    } 

    }; 
    lSearchButton.setOutputMarkupId(true); 
    this.setDefaultButton(lSearchButton); 
    add(lSearchButton); 
} 
} 
+0

Haben Sie getestet, wenn Sie die onSubmit() erreichen? Über Debug-Nachricht oder Debugger? – bert

+0

Ja, wie ich in meiner Frage gesagt habe, erreicht es nicht die onSubmit() und ich weiß nicht warum ... – jrochette

+0

Könnte es sein, dass dieses Ticket verwandt ist: https://issues.apache.org/jira/browse/WICKET-4630? (Nebenbei bemerkt: Sie wissen, dass 6.0.0beta-3 verfügbar ist?) –

Antwort

0

Die Komponenten, die Sie aktualisieren möchten, müssen hinzugefügt werden ein Container. Wenn Sie eine Anfrage senden, muss der Container zum Ziel hinzugefügt werden. Auf diese Weise werden Ihre Komponenten aktualisiert. Etwas wie:

WebMarkupContainer outputContainer = new WebMarkupContainer("searchResult"); 
outputContainer.setOutputMarkupId(true); 
outputContainer.add(table); 
add(outputContainer); 

@Override 
protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
    //change table ..... stuff ..... ... 

    //refresh container 
    target.add(outputContainer); 
} 


<div wicket:id="searchResult"></div>