2012-07-23 4 views
10

Desidero modificare il contenuto di un DataTable in base al contenuto di un modulo (pensarlo come una funzionalità della barra di ricerca). Lo facevo in wicket 1.5.x ma non riesco a farlo funzionare in wicket 6.0.0-beta2. Non sembra entrare nel metodo onSubmit di AjaxButton. Tutto il resto funziona perfettamente, ogni componente viene visualizzato correttamente e il dataTable viene riempito con i dati corretti quando la pagina viene caricata, ma quando faccio clic sul pulsante, non accade nulla.wicket 6.0.0-beta2 Aggiornamento del contenuto di DataTable quando si invia un modulo con AjaxButton

Qualsiasi aiuto sarebbe molto apprezzato. Ecco ciò che il mio sguardo codice come:

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); 
} 

e qui è la forma con l'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

Hai testato se raggiungi l'onSubmit()? Tramite messaggio di debug o debugger? – bert

+0

Sì, come ho detto nella mia domanda, non sta raggiungendo l'onSubmit() e non so perché ... – jrochette

+0

Potrebbe essere che questo biglietto sia correlato: https://issues.apache.org/jira/browse/WICKET-4630? (Nota a margine: sai che c'è 6.0.0beta-3 disponibile?) –

risposta

0

I componenti che si desidera aggiornare devono essere aggiunti in un container. Quando invii, il contenitore deve essere aggiunto alla destinazione. In questo modo i tuoi componenti saranno aggiornati. Qualcosa di simile:

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>