2012-09-17 291 views
1

我正在嘗試將歷史記錄功能添加到我的GWT應用程序中。GWT歷史記錄機制

據我的理解,GWT所提供的基本歷史支持確實是基本的......或者我應該說非常基本的

它並沒有真正存儲有關當前位於堆棧頂部的令牌以外的任何其他狀態信息。這意味着我會期望得到像彈出的令牌這是我們剛剛離開的信息&也可能獲得信息無論是後退還是前進被按下。

基本機制假定頁面沒有「高級」狀態,即如果當前的標記是'菜單',那麼我們來自這個菜單頁面的位置並不重要。不過,我想檢查一下,我們現在是否要離開一個特定的頁面,因爲如果我們這樣做,我想先顯示一個警告來保存數據。

此外,我的一些頁面沒有使用默認構造函數,而是從當前顯示的頁面獲取特定信息。這可以防止我創建一個集中的地方,所有頁面都被創建,應用程序中的所有按鈕都只是在使用歷史令牌。 (如第37頁的here所示。)

無論如何,我在這裏相當迷茫。我不確定要採取什麼樣的路徑才能在不重寫我的應用程序的情況下獲得對後退/前進的基本支持。

任何想法或想法?

回答

1

如果你需要跟蹤是你從哪裏來,你可以輕鬆地做自己:這是因爲存儲在全局狀態標記,只更新它,你在新的一個付諸行動之後容易。

僅供參考,PlaceController只是這樣做的(使用Place抽象而不是基於字符串的令牌)。它還會觸發一個PlaceChangeRequestEvent,您可以在setMessage之前在實際移動之前要求用戶確認(PlaceChangeEvent)。

我並不是建議你採用PlaceController而不是原始的History(即使我確信你不會後悔的話),只是指出這是可能的。

又見How do I determine whether I am going "forward" or "backward" through my History in GWT?GWT 2.1 Place/Activity technique glitch: URL changes before navigation is confirmed

0

令牌機制是基本的,但沒有什麼能阻止你構建一個複雜的標記來表示附加的狀態,並分析它以後檢索狀態。當然,它受瀏覽器支持的令牌或URL大小的限制,但您仍然可以使用它。你說得對,它並沒有爲麪包屑和歷史追蹤等更復雜的事物提供很多支持。這需要一些編碼來實現這些。

+0

你可以編碼你的痕跡在你的道理,如果你希望(我猜你不會需要超過4-5級)。 –

1

我假設你熟悉GWT活動和地點的設計模式。它提供了您需要的所有機制,即活動中的令牌和mayStop()方法。

如果我有可能有未保存的數據的視圖,我始終貫徹我從mayStop()調用來警告用戶,如果任何更改可能會丟失一個hasChanges()方法。

請注意,你可以讓你的令牌越具體需要。該令牌可能包含有關您所需頁面的任何信息,因此您可以對其進行解析並採取行動。喜歡的東西:

myPage.jsp /#日曆:CLASSID = 900 &選項=教師&菜單項=月

您可以輕鬆地一前一頁面添加到您的令牌,如果你需要它。

活動&地方模式給了我一切,我需要的,我不擔心歷史管理 - 我讓瀏覽器做到這一點。