【问题标题】:Reload vaadin table重新加载 vaadin 表
【发布时间】:2013-04-10 14:00:46
【问题描述】:

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

【问题讨论】:

  • 这张表是即时的 (table.setImmediate(true);) 吗?
  • 您有自己的餐桌容器吗?插入后会触发 itemSetChangeEvent 吗?
  • 你可以试试 table.refreshRowCache()
  • 表格是即时的。 refreshRowCache 方法不起作用。表有自己的容器,这里的问题是这个容器是在enter方法开始时填充的,当在子窗口中创建新项目时,容器应该完全重新加载。我也在考虑第二条评论中提到的事件。

标签: vaadin reload


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • SO网站提供相关的ans所以提供ans的详细解释,或者一些例子
    【解决方案3】:

    我刚刚遇到了类似的问题。我有一个由 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();
        }
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        如果你只是想刷新表格,你可以使用表格容器数据源通过删除所有项目并重新添加来进行刷新,就像下面的代码:

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

        【讨论】:

        • 如果该表有一万行,删除和重新添加它们的速度有多快?一定有比这更好的解决方案。
        猜你喜欢
        • 2015-03-18
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 2013-07-29
        • 2010-10-27
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多