添加行后 Vaadin 刷新网格

Vaadin refresh grid after adding row

我的网格在添加行后没有自动刷新。我已经尝试了其他问题的几种解决方案,但它们没有用。例如。 grid.clearSortOrder();grid.markAsDirty();。我的目标是在时间段后添加行。因此,我使用了计时器并添加了行,但在我单击 table 之前网格不会刷新。

简单代码示例:

Grid grid = new Grid();

grid.addColumn("Name");
grid.addColumn("Age");

Timer timer = new Timer();
timer.schedule(new TimerTask(){
    public void run(){
        grid.addRow("Exmaple","99");    
    }
}, 1000, 1000);

为此您需要服务器推送。参见 Vaadin-Doc-Serverpush。 您想从另一个线程更改 UI(Timer.schedule() 将在另一个线程中执行)。

Vaadin 回调由用户交互触发,例如鼠标按下按钮、选择选项等。当您需要用户界面反映不是由 mouse/keyboard 引起的更改时,您需要启用 server push:

@Push
public class App extends UI {

  @Override
  public void init(VaadinRequest request) {
    timer.schedule(new TimerTask() {
      public void run() {
        access(() -> grid.addRow("Example", "99"));
      }
    }, 1000, 1000);
  }
}

注意 UI.access(Runnable) 在从非请求线程访问时锁定 UI 的用法。