我有頁表與基於複雜查詢填充數據(即使使用分頁需要很多時間)。我使用BeanItemcontainer將數據加載到表中。現在來解決這個問題,我希望以異步方式將數據加載到表中(在完成的頁面加載到用戶屏幕後,我將填充數據)。有沒有像onPageLoad事件或onPageRenderEvent或類似的東西,我可以用來實現這一點?在頁面加載事件在vaadin
詳情 -
版本 - Vaadin -7.0
成分 - 表
數據容器 - BeanItemContainer。
我有頁表與基於複雜查詢填充數據(即使使用分頁需要很多時間)。我使用BeanItemcontainer將數據加載到表中。現在來解決這個問題,我希望以異步方式將數據加載到表中(在完成的頁面加載到用戶屏幕後,我將填充數據)。有沒有像onPageLoad事件或onPageRenderEvent或類似的東西,我可以用來實現這一點?在頁面加載事件在vaadin
詳情 -
版本 - Vaadin -7.0
成分 - 表
數據容器 - BeanItemContainer。
有許多方法可以解決這個問題,但是您必須決定如何解決問題。這裏有兩個我知道的:
1)來自客戶端的請求。
2)從服務器推送。 (技術上仍然是來自客戶端的請求)
1-A)來自客戶端編程的Javascript函數的請求。通過使用Javascript Extension或Javascript component將組件連接到佈局,並通過調用server-side API function發出請求。然後,您可以在該請求內更新表格,而不用擔心同步問題。
1 - B)製作自己的GWT/Vaadin小部件(基本上是同樣的事情)做1A。
2-A)來自在「服務器端」編程的Vaadin組件的請求。製作輪詢服務器的可見(或不可見)progress indicator。在後臺線程中填充表格,Vaadin將發送您當前收集的數據。進度指示器可以多次執行此操作,並且表格只會將差異發送到客戶端代碼(稱爲增量)。小心從後臺線程更新面向客戶端的組件;您需要對組件的更改進行同步以避免併發修改錯誤。
2 - B)嚮應用程序添加一個刷新程序,並按照上述2A進行操作,無需進度指示器。
任何一種解決方案都需要您在後臺線程(2A,B)或從客戶端(1A,B)調用的服務器方法中明確更新表。而這兩者在技術上都是基於客戶請求的。 Vaadin團隊正在努力增加真正的「推動力」。
Vaadin解決這個問題的方法是使用懶加載Container。 Vaadin有幾個懶惰加載容器可用:核心中的SQLContainer,LazyQueryContainer和JPAContainer。
你好亨利,我對遲到的迴應表示歉意。正如克里斯托弗提到的那樣 - 我們在7.0和7.1版本中使用了Refresher Addon,我們正在使用UI輪詢。當然,後臺線程會延遲更新內容。 – Patton 2014-02-28 05:06:45
不使用JPA容器...它的方式太慢了 – guilhermecgs 2016-07-06 13:29:53
非常詳盡的答案,謝謝你的指點!我會盡力按照你的建議來實現這一點,如果有任何問題,請回復! – Patton 2013-03-20 05:50:46
嗨克里斯托弗,抱歉接受你的答案有點遲,我們去了Refresher Addon,現在在7.1我們正在使用UI輪詢。 – Patton 2014-02-28 05:05:17