0

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

4

5 回答 5

1

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

于 2013-04-12T13:07:50.390 回答
0

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

于 2013-09-11T07:51:57.030 回答
0

我刚刚在这个问题上苦苦挣扎。我使用了一个由我扩展的 PagedTable...,并添加了一个这样的方法:

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

这样,我可以使用弹出窗口将新项目插入表中,并使用新行刷新表。(在可以看到新记录的页面中有一些额外的代码)

于 2016-06-14T17:37:12.217 回答
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();
    }
于 2015-12-29T22:12:22.007 回答
-1

如果您只想刷新表格,可以使用表格容器数据源通过删除所有项目并重新添加来执行此刷新,就像以下代码一样:

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);
}
于 2016-03-22T14:35:22.867 回答