添加行后Vaadin刷新网格

时间:2016-06-02 10:58:23

标签: java grid refresh vaadin vaadin7

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

简易代码示例:

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

Vaadin回调是由用户交互触发的,例如鼠标按下按钮,选择选项等。当您需要用户界面来反映不是由鼠标/键盘引起的更改时,您需要启用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时锁定UI的用法。