2012-06-06 2 views
2

Я использую Vaadin (6.7.4) и эту таблицу (он находится в модальном окне) не обновляет вид.Таблица Vaadin не обновляется независимо от того, что я пытаюсь использовать

Сначала он был создан сгенерированными столбцами, но я читал, что у него проблемы с обновлением таблицы, поэтому я переключился на обычную таблицу, но не обновился.

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"); 
} 

Edit: оказалось, проблема не в этом коде, но этот класс был экземпляр в 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

Извините, но практически невозможно вывести проблему, не видя остальной код. Однако, дикое предположение: метод createTable(), вызываемый в ошибке каждый раз после updateData()? – hezamu

0

Try изменения основного окна к статическому электричеству:

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

Это должно помочь.

Смежные вопросы