在Vaadin的网格中更新数据

时间:2017-06-04 10:05:46

标签: java grid vaadin vaadin7 dataprovider

大家好,我的问题是我的网格没有更新数据。

我有一个从数据库中获取新值的线程,但是当我从获取新值的集合中分配新的DataProvider时,网格不会改变任何内容。

例如,网格包含来自客户端的订单,如果有新订单可用,则每隔30秒进行一次线程搜索,然后获取ArrayList中的所有订单,并在网格的DataProvider中设置新的ArrayList,但网格继续具有与以前相同的值。

如何在不刷新所有网页的情况下刷新网格中的数据?

抱歉我的英文

谢谢。

1 个答案:

答案 0 :(得分:2)

<强>民意测验

您可以将浏览器设置为以给定间隔检查服务器是否有更新。我添加了几个代码示例如何使用轮询间隔。

例如,如果您希望浏览器每30秒更新一次,那么您可以启用这样的轮询:

MyUI ui = getMyUi();
ui.setPollInterval(30000);
if (ui.isPollListenerRegistered()) {
    Registration r = ui.addPollListener(this::reloadFromDatabase);
    ui.setPollRegistration(r);
}

将pollInterval设置为大于-1的值会使浏览器以给定的延迟调用服务器。添加轮询侦听器允许您在服务器上注意这些检查并从数据库加载。

如果只有1页需要像这样刷新,那么添加导航监听器也可以将轮询间隔设置回-1,这样其他页面就不会发送不必要的轮询事件。

MyUI ui = getMyUi();
ui.setPollInterval(-1);
if (ui.isPollListenerRegistered()) {
    ui.getPollRegistration().unregister();
}

Vaadin wiki中有一些文档,但如果你能从数据库中读取值,你就不需要后台线程。

https://vaadin.com/wiki?p_p_id=36

<强>推

使用Vaadin Push,您可以在后台更新数据,然后只请求应更新的客户端进行刷新。这允许您优化请求,因为客户端不执行不必要的轮询。您还可以单个请求从Web服务获取数据,然后使用相同的数据更新所有客户端。

您可以在Vaadin文档中阅读更多内容:

https://vaadin.com/docs/-/part/framework/advanced/advanced-push.html

我推送了一个示例项目,该项目展示了如何使用单个重复的后台线程来更新数据,然后使用它更新网格的内容。完整的推送示例不仅仅有几行代码,因此您可以在此处找到代码:

https://github.com/m1kah/vaadin-grid-push

相关问题