【问题标题】:On Page Load event in vaadinvaadin 中的页面加载事件
【发布时间】:2013-03-16 10:53:36
【问题描述】:

我有一个包含基于复杂查询填充数据的表的页面(即使我使用分页也需要很多时间)。我使用 BeanItemcontainer 将数据加载到表中。现在遇到问题,我希望以异步方式将数据加载到表中(在用户屏幕上加载完整页面之后。我想填充数据)。是否有类似 onPageLoad 事件或 onPageRenderEvent 或等效的东西可以用来实现这一点?

详情 -

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

【问题讨论】:

    标签: vaadin


    【解决方案1】:

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

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

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

    1 -- B) 制作自己的 GWT / Vaadin 小部件(基本上是一样的)来完成 1A。

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

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

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

    【讨论】:

    • 非常详尽的答案,感谢您的指点!我会尝试按照您建议的方式实施,如果有任何问题,我会回复!
    • 嗨克里斯托弗,很抱歉接受你的回答有点晚了,我们使用 Refresher Addon,现在在 7.1 中我们正在使用 UI 轮询。
    【解决方案2】:

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

    【讨论】:

    • 您好 Henri,对于迟到的回复,我深表歉意。正如 Christopher 提到的 - 我们在 7.0 中使用 Refresher Addon,在 7.1 中我们使用 UI Polling。当然后台线程会懒惰地更新内容。
    • 不要使用 JPA 容器...它太慢了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多