2014-06-21 33 views
1

我想更改按鈕單擊上的列表視圖的數據。Wicket替換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 

我該如何解決這個問題?

+0

我整個列表添加到目標例如'target.add(列表視圖);'。在更新部分列表時,有一些知道ajax IE的問題。 – Martin

+0

我已經試過了,但是listview不能被替換(據我所知):'這個組件是一箇中繼器,不能直接通過ajax重新繪製。相反,在層次結構中添加其父代或另一個標記容器。# – Markus

回答

3

,因爲我無法通過target.add(listview);更新列表視圖我加了WebMarkupContainer這樣的:

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

,現在我可以更新onClick方法:

target.add(datacontainer); 

這工作正常 - 問題解決了。

但爲什麼更換的孩子沒有工作,仍然不清楚我

+0

用#addChildren()將所有標籤添加到AjaxRequestTarget。請注意,ListItems通過來自父母轉發器的索引獲取他們的模型。列表中沒有匹配項的ListItem將拋出IllegalArgumentException。 – svenmeier

+0

列表視圖的子項已經從之前的列表中渲染出來,將它們添加到目標將無助於創建新列表。 – Martin