2016-07-22 86 views
0

我正在研究一個包含大量模塊(JSP片段)的div的web應用程序。該網站是用普通的JSP/servlets/jQuery編寫的。在理想的情況下,用戶只使用按鈕瀏覽站點,並且ajax將模塊加載到相應的div中。但是,如果用戶重新加載站點,或者獲取服務器端驗證錯誤+重定向,則視圖會進入默認模式,並且我必須重建他上次看到的狀態。堅持jQuery和servlets的視圖狀態

由於模塊數量很少,我引入了變量來跟蹤每個div的狀態,這很好,但是當它達到更高的複雜度時,它開始是一個很大的痛苦,而且會變得更糟,再加上一個惡夢來維護和調試。

例如:有<div id="one"><div id="two"><div id="tree">。如果某人活躍,​​則隱藏兩個和三個。如果兩個是活動的,一個是暗淡的,三個隱藏。如果有三個活動,則一個和兩個活動也是活動的,但不會顯示與活動時相同的內容。即使這個例子非常複雜,甚至沒有計算出每個輸入變化(搜索,過濾等)都可以觸發這些轉換。

是否有任何傳統的方式或某種伎倆,使這更容易?

+0

我看,但我會很感激的AJAX例子是可以接受的在任何公司,而不是我的黑客和斜槓js代碼,它正在監視幾十個變量。 – Peter

+0

你能發表一個jdfiddle三個div,你說的很好嗎? – TTCC

回答

1

我會用一個簡單的方法來保存狀態:

<div id="1" class="persist" state='visisble'></div> 
<div id="2" class="persist" state='visisble'></div> 
<div id="3" class="persist" state='hidden'> 
    <input type="text" class="persist" id="i1" /> 
</div> 

使用jQuery,我會選擇與堅持每類股利。創建一個JSON(O等),如:

{ 
    persistance [ 
     { 'id':1, 'state':'visible' }, 
     { 'id':2, 'state':'visible' }, 
     { 'id':3, 'state':'hidden', 
      "fields":[ { 'id':'i1', value:'foo' }] 
     } 
} 

它將包含你想保留所有的數據(希望你在這裏命名約定;))。對於每個div,獲取輸入/ ...與持久類來存儲值(或其他字段名稱取決於標籤)

然後將其發送到服務器保持它(或做你想做的事)。要恢復狀態,您需要將ID設置回以前的狀態。對於每個div ID,請設置值receive和每個字段。

你用beforeunload頁面事件運行它(不知道它是否工作正常;))來保存它。要恢復它,您可以在Ajax和Jquery中使用相同的方式,或者在JSP中使用相同的方法。

對於代碼示例,你需要給我一些更多的信息(類爲模塊,類型所需的數據,...)

+0

謝謝!這對我來說應該足夠好。 – Peter

+0

不客氣,即使有很多模塊,這應該是相當有效的。我不知道這是否存在於圖書館某處,如果不存在,這應該;) – AxelH