Apache Wicket - 从ListView内部触发刷新ListView

时间:2011-09-23 12:25:14

标签: ajax apache listview refresh wicket

我得到以下结构,在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像重新加载而不重新加载整个页面。 “删除”按钮从表中删除一行,因此一行应该消失。

我使用AjaxSelfUpdatingTimerBehavior实现了重新加载ListView:

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

每5秒刷新一次listView。 好的,但现在我想刷新例如删除按钮的onSubmit中的listView。

在这里;问题是:如何做到这一点?

我尝试了onSubmit

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

但两者都不起作用。

1 个答案:

答案 0 :(得分:4)

首先,你必须在你的listView中将outputId设置为true。因此Wicket将为list标签生成一个id,需要由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); 
}
  }
}