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