wicket 6.0.0-beta2 Обновление содержимого DataTable при отправке формы с помощью AjaxButton

Я хочу изменить содержимое DataTable в зависимости от содержимого формы (подумайте об этом как о функции панели поиска). Раньше я делал это в wicket 1.5.x, но не могу заставить это работать в wicket 6.0.0-beta2. Кажется, он не входит в метод onSubmit AjaxButton. Все остальное работает нормально, все компоненты отображаются правильно, а 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); 
} 

а вот форма с 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); 
} 
} 

person jrochette    schedule 23.07.2012    source источник
comment
Вы проверяли, достигли ли вы onSubmit()? Через отладочное сообщение или отладчик?   -  person bert    schedule 24.07.2012
comment
Да, как я сказал в своем вопросе, он не достигает onSubmit(), и я не знаю, почему...   -  person jrochette    schedule 25.07.2012
comment
Может быть, этот билет связан с: issues.apache.org/jira/browse/WICKET -4630 ? (Кстати, вы знаете, что доступна версия 6.0.0beta-3?)   -  person Joachim Rohde    schedule 02.08.2012
comment
Я не думаю, что это связано с этим билетом, так как это проблема с невыполнением вызова ajax. Вероятно, есть некоторые параметры, которые я неправильно установил для вызова ajax (возможно, в updateAjaxAttributes(), который упоминается на этой странице: cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax). На данный момент я прекратил использование калитки 6.x и вернулся к 1.5.x, и все работает нормально. Бета 3 стоит попробовать (спасибо за информацию)   -  person jrochette    schedule 02.08.2012
comment
Как форма получает таблицу? Вы не передаете его, и таблица не является окончательной в верхнем примере кода   -  person RobAu    schedule 09.02.2013


Ответы (1)


Компоненты, которые вы хотите обновить, должны быть добавлены в контейнер. Когда вы отправляете, контейнер должен быть добавлен к цели. Таким образом, ваши компоненты будут обновлены. Что-то типа:

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>
person green    schedule 19.08.2015