Apache Wicket - обновление ListView, запускаемое изнутри ListView - PullRequest
0 голосов
/ 23 сентября 2011

я получил следующую структуру, которая отображает редактируемые строки в HTML-таблице

Panel
 + WebMarkupContainer - in HTML <tbody wicket:id="container">
   + ListView which for each item in the list does (in HTML this)
     + item.add(new PopTable1Row("Pop1Panel", popTable1Item, ComponentMode.EDIT));
       + PopTable1Row component contains
         + Form
           + some inputs and a 2 submit buttons (Save, Delete)

Теперь я хочу добиться этого, например, нажав на удаление списка, AJAX будет выглядеть как перезагрузка без перезагрузки всей страницы.Кнопка Удалить удаляет строку из таблицы, поэтому одна строка должна исчезнуть.

Я достиг перезагрузки ListView с помощью AjaxSelfUpdatingTimerBehavior:

WebMarkupContainer.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)));

Он обновлял listView каждые 5 секунд.Хорошо, но теперь я хочу обновить listView в onSubmit, например, кнопки «Удалить».

И здесь возникает вопрос: как это сделать?

Я пытался в onSubmit:

this.getParent().getParent().getParent().getParent().render();
this.getParent().getParent().getParent().getParent().renderComponent();

Но оба не работали.

1 Ответ

4 голосов
/ 23 сентября 2011

Сначала вы должны установить для outputId значение true в вашем listView. Поэтому Wicket сгенерирует идентификатор для тега списка, который должен быть обновлен с помощью ajax.

yourListView.setOutputMarkupId (истина);

А затем в вашем методе onSubmit скажите Wicket, чтобы перекрасить список. Обратите внимание, что в примере кнопка сохранения представляет собой AjaxLink, но вы можете использовать другие компоненты.

AjaxLink<Void> dltBttn = new AjaxLink<Void>("yourButtonId") {
  public void onClick(AjaxRequestTarget target) {
    // your stuff

    if(target != null) {
      // tells wicket to repaint your list
      target.addComponent(yourListViewComponent); 
}
  }
}
...