2013-04-10 74 views
0

我在視圖中有一個Vaadin表。有一個按鈕可以在表格中創建一個新行,打開一個子窗口讓您指定新項目並創建它。 一旦創建通知告訴你它已經成功創建,此時我想重新加載當前的UI(這是一個視圖),以便新元素可見(如果分頁可以使其可見)。 在關閉子窗口之前,我試過但它不起作用。重新加載vaadin表

+0

這個表是否即時('table.setImmediate(true);')? – 2013-04-11 08:02:55

+0

你有沒有自己的表格容器?插入後是否觸發itemSetChangeEvent? – raffael 2013-04-11 09:59:59

+0

你可以嘗試table.refreshRowCache() – 2013-04-11 13:02:02

回答

1

最後,我利用Table方法addItem解決了這個問題。儘管必須有更多優雅的解決方案,

0

通過更改您使用的靜態主要佈局,可以自動重新加載vaadin表。

+0

SO網站提供相關的ans,所以提供詳細的解釋或者一些例子 – 2013-09-11 08:11:59

0

我剛碰到類似的問題。我有一個由sql支持的表格和一個用於編輯細節+刪除的子窗口。無論是在子窗口還是在表上都有markAsDirty(),setImmediate(true),表格都沒有更新。

解決的辦法是讓從表中SQLContainer,並呼籲該刷新:

Table table = new Table("Contact items"); 
... // add dataSource, headers etc, and after several calls: 

@Override 
    public void windowClose(CloseEvent e) { 
     SQLContainer c = (SQLContainer)table.getContainerDataSource(); 
     c.refresh(); 
    } 
0

如果你只想刷新表,可以使用表集裝箱數據源通過做這個刷新刪除所有項目並重新添加,就像下面的代碼一樣:

List<Item> items = new ArrayList<>(); 
for(Object object : table.getContainerDataSouce().getItemIds()){ 
    items.add(table.getContainerDataSource().getItem(object)); 
} 

table.getContainerDataSource().removeAllItems(); 
table.removeAllItems(); 

items.add(<yourItem>); 

for(Item item : items){ 
    table.getContainerDataSource().addItem(item); 
} 
0

我剛纔一直在解決這個問題。我用了一個PagedTable ......由我擴展,並添加這樣的方法:

Object[] visibleColumns = getVisibleColumns(); 
getDataSource().refresh(); 
setContainerDataSource(getContainerDataSource()); 
setVisibleColumns(visibleColumns); 
refreshRowCache(); 

這樣我可以用一個彈出插入一個新項目成表,並獲得表更新與新線(有一些額外的代碼可以查看新記錄的頁面)