我有一個以下問題。我們有一個應用程序,它基本上是一組控制與用戶交互的JSP和操作類。這些操作設置了頁面正確顯示所需的一些參數。系統中的網址總是包含事件的名稱,該名稱定義了我們應該接下來的頁面。一堆網址的模式
現在,幾乎每個頁面都有一個「取消」按鈕,它應該會導致前一頁。從一開始,每個取消按鈕url都被嚴格定義,但最終,隨着系統變得越來越大,事實證明,編寫此按鈕的邏輯非常困難,因此它會完全導致前一頁。
例如,假設我們有三個頁面A,B和C.頁面A有一個通向頁面B的鏈接,B有一個通向C的鏈接。因此C有一個甚至導致B的URL(和它也包含實體在B)上顯示的關鍵。但是,假設頁面A已被修改,現在還有一個關於C的鏈接。現在我們需要檢查從那裏出現的C頁面並適當地設置URL,並且邏輯變得相當混雜。
所以,我向我的團隊提出了以下解決方案。用戶會話應該包含一個名爲CancelStack的特殊對象。每一個導致頁面的動作都應該將它的url放到堆棧中(包含事件和一些所需的附加數據)。在每個頁面上,取消按鈕現在應該有一個通往特殊事件的URL,稱爲cancelStack。
什麼cancelStack行動確實是這樣的:
- 從會話中檢索取消堆棧。
- 彈出最後一個網址,不要使用它。
- 再次彈出網址並重定向到該網址。
爲什麼我們檢索最後一個URL而不使用?假設我們有頁面A和B,A導致B.A的操作將它的URL放入堆棧中,並且這應該是B頁面的取消URL。現在,針對B的操作將它的url放入堆棧中。因此,我彈出它沒有使用,然後彈出第一個網址,重定向到一個動作,並且這個動作再次添加一個網址到堆棧(因此堆棧大小減少1,而不是2)。
這似乎是一個很好的方案,但是看起來相當奇怪的是堆棧的頂層元素被彈出而沒有使用。所以我有個問題。是否有任何設計模式來存儲會話中的URL序列以正確組織取消按鈕?
這聽起來很像一個在許多網站使用的'麪包屑'系統。或者我誤解了你的解釋? – Wivani
不,我們在這裏並沒有完全使用麪包屑導航,儘管這個想法幾乎相同 - 我們需要跟蹤我們訪問過的以前的頁面 –