我的页面有基于复杂查询填充数据的表格(即使我使用分页也需要很多时间)。我使用BeanItemcontainer将数据加载到表中。现在出现问题,我希望以异步方式将数据加载到表中(在用户屏幕上加载完整页面之后。我想填充数据)。有没有像onPageLoad事件或onPageRenderEvent或类似的东西,我可以用来实现这个?
详情 -
版本 - Vaadin -7.0
组件 - 表
数据容器 - BeanItemContainer。
答案 0 :(得分:4)
有很多方法可以解决这个问题,但您必须决定如何解决问题。以下是我所知道的两个:
1)来自客户的请求 2)从服务器推送。 (技术上仍然是客户的要求)
1 - A)来自客户端编程的Javascript函数的请求。使用Javascript Extension或Javascript component将组件附加到布局,然后通过调用server-side API function发出请求。然后,您可以更新该请求中的表,而不必担心同步问题。
1 - B)制作你自己的GWT / Vaadin小部件(基本上是相同的)来做1A。
2 - A)来自“服务器端”编程的Vaadin组件的请求。制作一个轮询服务器的可见(或不可见)progress indicator。在后台线程中填充表格,Vaadin将发送您当前收集的数据。进度指示器可以多次执行此操作,表格只会将差异发送到客户端代码(称为delta)。小心从后台线程更新面向客户端的组件;您需要同步组件的更改,以避免并发修改错误。
2 - B)在应用程序中添加复习,并按照上面的2A进行操作,无需进度指示器。
这两种解决方案都涉及您在后台线程(2A,B)或从客户端(1A,B)调用的服务器方法中显式更新表。两者都是技术上基于客户端请求的。 Vaadin团队正在努力增加真正的“推动力”。
答案 1 :(得分:0)
Vaadin解决这个问题的方法是使用延迟加载Container。 Vaadin有几个延迟加载容器:核心中的SQLContainer,LazyQueryContainer和JPAContainer。