我在我的web應用程序中使用JSF 2.2,PrimeFaces 6和Spring Framework 4.3。
用戶在登錄後重定向到主頁。在主頁上有一些圖表,表格等被加載。他們顯示一些實時信息,並且需要一些時間來加載主頁。我不希望用戶在登錄頁面等待太久。所以我用下面的代碼加載頁面加載後,圖表在here說:如何同時加載/更新JSF/PrimeFaces組件?
<h:form id="hiddenForm" style="display: none;">
<p:remoteCommand name="onload" actionListener="#{homeMB.onload}"
update=":firstChartForm :secondChartForm :thirdChartForm" global="false"/>
</h:form>
這是支持豆的onload方法:
public void onload() {
fillFirstChart(); //Takes 5 seconds
fillSecondChart(); //Takes 1 second
fillThirdChart(); // Takes 3 seconds.
}
圖表是由這些方法填充與更新update
參數p:remoteCommand
的幫助,但需要9秒。我想同時運行這些方法,並在數據加載後立即用相應方法提供的數據更新每個圖表。
我的意思是說,一旦用戶點擊登錄按鈕,用戶應該被重定向到主頁,並且在主頁上首先SecondChart應該在1秒內被填充/更新,並且2秒之後ThirdChart被填充/更新,並且最後2幾秒鐘後FirstChart應該被填充/更新。所以總共需要5秒。
編輯: This answer不適合我,因爲當我異步加載圖表,JSF等待最慢的一個,以更新他們。好吧,總共需要5秒而不是9秒,但正如我在網頁上所說的,首先SecondChart應該在1秒內被填充/更新,2秒鐘之後ThirdChart被填充/更新,最後2秒後FirstChart應該被填充/更新」。但是如果我應用第一個答案中描述的方式,它們全部在5秒內更新。
This answer可能被應用。我的意思是,只要用戶單擊登錄按鈕,服務器就可以收集數據並將其推送到圖表,並且可以從RequestContext.getCurrentInstance().update("foo:bar");
更新後臺bean,如here所示。但我認爲可能有一些更簡單的方法,因爲我認爲很多人以前可能遇到過類似的問題。
謝謝。
用戶後登錄,所有的圖表填補了第一次,我用'號碼:poll'稍後檢索它們。我可以按照[此處](https://stackoverflow.com/a/6151574/1046569)中顯示的計劃任務執行相同的操作。但是,我第一次需要不同的東西。順便說一句,我已經用'async = true'調用'p:remoteCommand',但是如果我只使用一個遠程命令,所有這些命令都會在5秒後更新。如果我使用多個遠程命令,你能告訴我如何異步調用它們嗎?不允許爲多個遠程命令使用相同的'onload'名稱。 – tylerdurden
您可以使用類似超時的方式同時啓動遠程命令。請參閱https://stackoverflow.com/questions/9516900/how-can-i-create-an-asynchronous-function-in-javascript –
順便說一下,在您的問題中,我看不到'async =「true」' 。你應該在'p:remoteCommand'中使用它。 –