2014-05-05 167 views
3

現在我有一個問題:最佳實踐,以更新客戶端(GWT)Web應用程序

  1. 用戶打開Web應用程序頁面,獲取使用Javascript(ModuleName.nocache.js); 然後我更新客戶端(roc請求,查看等​​)。
  2. 用戶沒有關閉瀏覽器中的web應用程序選項卡,沒有更新頁面。他在某處點擊並隨機爆炸。例如,RPC不起作用,servlet在任何地方移動,有很多錯誤或者沒有。

現在我想實現場景:
用戶必須具有cookie屬性和Web應用程序版本。
根據要求我看到它,並在迴應迫使他更新頁面(不知道如何)。
如果用戶的請求無法傳送gwt強迫他更新頁面(不知道如何)。

但我認爲必須有一個最佳實踐方式來解決這個問題。

回答

5

Catch IncompatibleRemoteServiceException s和StatusCodeException s在您的AsynCallback s。第一個告訴你客戶端代碼與服務器端代碼不兼容;第二個可以告訴你,那裏不再有一個RPC servlet(查找404狀態碼)。 然後,您可以向用戶顯示一條消息,提示他重新加載頁面(例如Google Groups所做的)。

這就是說,有緩解這種如果變化相對較小的一些方法:你可以保持身邊服務器端系列化的政策文件,以便服務器可以處理來自不同的客戶端版本請求。但是這些改變必須以某種方式向後兼容。
然後,您可以在服務器端檢測客戶端版本(使用最新的序列化策略文件列表並檢查客戶端是使用其中一個還是較舊的客戶端;或使用請求標頭或cookie)幷包括響應中的一些內容(響應頭或cookie)告訴它有一個新版本。
或者你可以定期輪詢服務器(顯然是而不是使用RPC雖然)的最新版本的應用程序。

+0

謝謝,它的工作原理。 – jNess

0

另一種方法:

  1. 如果它是空的(如果不是,進入下一步驟),保存com.google.gwt.core.client.GWT.getPermutationStrongName();LocalStorage或在您的Cookies並完成流程。
  2. 當你的應用程序加載時,再次獲取permutationStrongName,並檢查保存的是不同的。
  3. 如果向服務器請求一切的力量(如果你想/需要「休息」異步過程,你可以使用GQuery - promises)。然後,在您的LocalStorageCookies中替換新的gwt的排列id。

你可以這樣做,總是你的應用程序被加載(不是什麼大不了的)。現在您可以在服務器上的版本發生變化時使用。

+0

謝謝,這是有用的東西 – jNess

+0

高興地幫助! – apanizo