2013-03-16 68 views
3

我有頁表與基於複雜查詢填充數據(即使使用分頁需要很多時間)。我使用BeanItemcontainer將數據加載到表中。現在來解決這個問題,我希望以異步方式將數據加載到表中(在完成的頁面加載到用戶屏幕後,我將填充數據)。有沒有像onPageLoad事件或onPageRenderEvent或類似的東西,我可以用來實現這一點?在頁面加載事件在vaadin

詳情 -

版本 - Vaadin -7.0
成分 - 表
數據容器 - BeanItemContainer。

回答

4

有許多方法可以解決這個問題,但是您必須決定如何解決問題。這裏有兩個我知道的:

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團隊正在努力增加真正的「推動力」。

+0

非常詳盡的答案,謝謝你的指點!我會盡力按照你的建議來實現這一點,如果有任何問題,請回復! – Patton 2013-03-20 05:50:46

+0

嗨克里斯托弗,抱歉接受你的答案有點遲,我們去了Refresher Addon,現在在7.1我們正在使用UI輪詢。 – Patton 2014-02-28 05:05:17

0

Vaadin解決這個問題的方法是使用懶加載Container。 Vaadin有幾個懶惰加載容器可用:核心中的SQLContainer,LazyQueryContainerJPAContainer

+0

你好亨利,我對遲到的迴應表示歉意。正如克里斯托弗提到的那樣 - 我們在7.0和7.1版本中使用了Refresher Addon,我們正在使用UI輪詢。當然,後臺線程會延遲更新內容。 – Patton 2014-02-28 05:06:45

+0

不使用JPA容器...它的方式太慢了 – guilhermecgs 2016-07-06 13:29:53