添加行后,我的网格不会自动刷新。我从其他问题尝试了几种解决方案,但它们没有用。例如。 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);
答案 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的用法。