2012-06-06 81 views
2

我使用Vaadin(6.7.4)和此表(它在模態窗口上)不更新視圖。無論我嘗試什麼,Vaadin Table都不會更新

首先它是用生成的列創建的,但我讀到它有表更新的問題,所以我切換回普通表,但仍然沒有刷新。

的UpdateData由按鈕單擊事件面板上稱爲

final Table table = new Table(); 
final IndexedContainer ic=new IndexedContainer(); 

public createTable(){ 
    table.setImmediate(true); 
    table.setEnabled(true); 
    ic.addContainerProperty("Name", String.class, null); 
    ic.addContainerProperty("Edit", Button.class, null); 
    ic.addContainerProperty("Delete", Button.class, null); 
    table.setContainerDataSource(ic); 
} 

public void addItems(Table table) { 
    for (String s : createdNames) { 
     ic.addItem(s); 
     ic.getItem(s).getItemProperty("Name").setValue(s); 
     ic.getItem(s).getItemProperty("Edit").setValue("Edit"); 
     ic.getItem(s).getItemProperty("Delete").setValue("Delete"); 
    } 

} 

public void updateData() {  
    IndexedContainer c=(IndexedContainer) table.getContainerDataSource(); 
    c.removeAllItems(); 
    c.addItem("myname"); 
    c.getContainerProperty("myname", "Name").setValue("Mr.X"); 
    table.setContainerDataSource(c); 
    table.refreshRowCache(); 
    table.requestRepaint(); 
    System.out.println("see the output but no update on table"); 
} 

編輯:原來問題不是這個代碼,但這個類被實例化時的2倍,所以我有不同的情況;我正在更新的那個和我看到的那個。

回答

3

這是一個完整的Vaadin應用程序,它的工作原理:

public class TableTest extends Application { 
final Table table = new Table(); 
final IndexedContainer ic = new IndexedContainer(); 

@Override 
public void init() { 
    setMainWindow(new Window("Window")); 
    createTable(); 
    getMainWindow().addComponent(table); 
    getMainWindow().addComponent(
      new Button("Click me", new Button.ClickListener() { 
       public void buttonClick(ClickEvent event) { 
        updateData(); 
       } 
      })); 
} 

public void createTable() { 
    table.setImmediate(true); 
    table.setEnabled(true); 
    ic.addContainerProperty("Name", String.class, null); 
    ic.addContainerProperty("Edit", Button.class, null); 
    ic.addContainerProperty("Delete", Button.class, null); 
    table.setContainerDataSource(ic); 
} 

public void updateData() { 
    ic.removeAllItems(); 
    ic.addItem("myname"); 
    ic.getContainerProperty("myname", "Name").setValue("Mr.X"); 
    System.out.println("see the output but no update on table"); 
} 
} 

看來這個問題是別的地方在你的代碼。順便說一句,將來你應該從頭開始創建一個全新的應用程序來隔離問題並驗證它是你認爲它的地方。

+0

謝謝,但這是所有與表相關的代碼,任何建議我應該在哪裏檢查問題? – Spring

+1

對不起,但實際上不可能在沒有看到其他代碼的情況下推斷出問題。然而,瘋狂的猜測是:每次updateData()後都會調用createTable()方法? – hezamu

0

嘗試改變主窗口靜態:

public static Window win = new Window("Window"); 
setMainWindow(win); 

這應該幫助。

相關問題