Wicket替换ListView中的项目

时间:2014-06-21 13:33:47

标签: java listview wicket

我想在Button Click上更改listview的数据。

这就是我现在所做的事情:

final PageableListView<Users> listview = new PageableListView<Users>("rows", displayList, 10) {
    //....
    protected void populateItem(final ListItem<Users> item) {
        item.add(new Label("username").setOutputMarkupId(true));
        // .. other fields
    }
}

final IndicatingAjaxFallbackLink<MyPanel> sublist = new IndicatingAjaxFallbackLink<MyPanel>("sublist") {
        public void onClick(AjaxRequestTarget target) {
                displayList = // get new list
                listview.setList(displayList);
                target.addChildren(listview, Label.class);
        }
};
add(sublist);

如果新列表与旧列表的大小完全相同,则此方法有效。在任何其他情况下,我得到

Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

因为我无法通过target.add(listview);更新列表视图,所以我添加了WebMarkupContainer,如下所示:

final WebMarkupContainer datacontainer = new WebMarkupContainer("data");
datacontainer.setOutputMarkupId(true);
add(datacontainer);

现在我可以更新onClick方法:

target.add(datacontainer);

这很好用 - 问题解决了。

但为什么更换孩子不起作用仍然不清楚