2010-08-04 114 views
1

我有一個jsf頁面,它有一個請求範圍bean。緩慢的數據庫查詢在請求作用域bean的構造函數中觸發。然後,查詢結果顯示在網頁上的jsf數據表中。等待慢速JSF頁面

如何在數據庫查詢完成之前顯示等待消息?

我試過爲onLoad標籤調用javascript函數。只有在執行慢分貝查詢後才調用該方法。

回答

2

緩慢的數據庫查詢正在服務器上發生,很久以前,構建好的頁面纔將其發送給瀏覽器。唯一的辦法就是安排瀏覽器在之前顯示「等待」消息,然後發起HTTP請求,以導致運行JSF頁面。

然而,花時間在此的最好方法是修復查詢。

+0

它是一個巨大的查詢,我不能改變。那麼,我可以使用你的方法,但我想我將不得不使用會話範圍的bean。我錯了嗎? – outvik 2010-08-04 14:18:36

+0

與DBA交談。你應該真的考慮DB級別的分頁。現在,這聽起來很像是你將整個數據庫表中有成千上萬的記錄複製到每個單獨的最終用戶的Java內存中。這可能會在大量使用/訪問時遲早打開您的應用程序。 – BalusC 2010-08-04 14:23:19

+0

BalusC,你說得對。 DB分頁必須更高效。我正在通過您的博客進行舉例。 – outvik 2010-08-04 17:15:03

1

您必須首先加載「等待頁面」,然後在該頁面的onLoad中加載執行DB查詢的頁面。如果查詢速度快,用戶不會看到太多閃爍,因爲現代瀏覽器(除IE6以外的任何東西)。

或者,您可以將結果載入隱藏的iframe,並在頁面中顯示「請稍候」。當iframe代碼加載,你可以把它用parent訪問父文檔可見:

parent.getElementById('frame').styles.display = ''; 
parent.getElementById('wait').styles.display = 'none'; 

(把這種在JSP這是iframe內的onLoad)。