重新加载vaadin表

时间:2013-04-10 14:00:47

标签: vaadin reload

我在视图中有一个Vaadin表。有一个按钮可以在表格中创建一个新行,打开一个子窗口,允许您指定新项目并创建它。 一旦创建,通知就会告诉您它已成功创建,此时我想重新加载当前的UI(这是一个View),以便新元素可见(如果分页会使其可见)。 我在关闭子窗口之前尝试了UI.getCurrent().markAsDirty();,但它不起作用。

5 个答案:

答案 0 :(得分:1)

最后,我利用Table方法addItem解决了这个问题。这是有效的,但必须有更优雅的解决方案。

答案 1 :(得分:0)

通过将您使用的主要布局更改为静态,可以自动重新加载vaadin表。

答案 2 :(得分:0)

我刚遇到类似的问题。我有一个由sql支持的表,以及一个用于编辑详细信息+删除的子窗口。无论在子窗口还是表格上都有markAsDirty(),setImmediate(true),表格都没有更新。

解决方案是从表中获取SQLContainer,并在其上调用refresh:

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

答案 3 :(得分: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);
}

答案 4 :(得分:0)

我一直在努力解决这个问题。我使用了一个由我扩展的PagedTable ...并添加了这样的方法:

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

通过这种方式,我可以使用弹出窗口将新项目插入到表格中,然后使用新行刷新表格。(还有一些额外的代码可以在哪里查看新记录)