vaadin 中的页面加载事件

问题描述 投票:0回答:3

我有一个带有表格的页面,该表格根据复杂查询填充数据(即使我使用分页,也需要花费大量时间)。我使用 BeanItemcontainer 将数据加载到表中。现在谈到问题,我希望以异步方式将数据加载到表中(在完整页面加载到用户屏幕上之后。我想填充数据)。是否有类似 onPageLoad 事件或 onPageRenderEvent 或类似事件的东西可以用来实现此目的?

详情 -

版本 - Vaadin -7.0
组件 - 表格
数据容器 - BeanItemContainer。

vaadin
3个回答
4
投票

解决此问题的方法有很多种,但您必须决定如何解决该问题。这是我所知道的两个:

1) 客户的要求。
2)从服务器推送。 (技术上仍然是客户的请求)

1 -- A) 来自客户端编程的 Javascript 函数的请求。使用Javascript扩展Javascript组件将组件附加到布局,并通过调用服务器端API函数发出请求。然后,您可以更新该请求中的表,而不必担心同步问题。

1 -- B) 制作自己的 GWT / Vaadin 小部件(基本上是同样的事情)来执行 1A。

2 -- A) 来自“服务器端”编程的 Vaadin 组件的请求。制作一个可见(或不可见)的进度指示器来轮询服务器。在后台线程中填充表,Vaadin 将发送您当前收集的数据。进度指示器可以多次执行此操作,并且表只会将差异发送到客户端代码(称为增量)。小心从后台线程更新面向客户端的组件;您需要同步对组件的更改以避免并发修改错误。

2 -- B) 向应用程序添加复习内容并按照上面的 2A 进行操作,无需进度指示器。

任一解决方案都涉及您在后台线程 (2A,B) 或从客户端调用的服务器方法 (1A,B) 中显式更新表。两者在技术上都是基于客户请求的。 Vaadin 团队正在努力添加真正的“推送”。


0
投票

Vaadin解决这个问题的方法是使用延迟加载Container。 Vaadin 有多个延迟加载容器可用:核心中的 SQLContainer、LazyQueryContainerJPAContainer


0
投票

您可以在 JavaScript 中添加加载事件监听器并等待它被触发。一个简单的方法是定义一个 Java 方法来接收

Runnable
作为参数并在页面加载时运行它。

void onLoad(Runnable runnable) {
    Page page = UI.getCurrent().getPage();
    
    page.executeJs("window.addEventListener('load', () => {} );")
                .then( (event) -> runnable.run() );
   }

你可以这样使用它:

onLoad( () -> Notification.show("Page loaded") );

使用 Vaadin 24.3.2 进行测试

© www.soinside.com 2019 - 2024. All rights reserved.