問題描述:頁面查詢時,在當前頁面A輸入查詢條件之後,跳轉至另一個頁面B,當重新點擊頁面A時,輸入的查詢條件和查詢結果均被初始化,需要重新輸入查詢條件,用戶體驗不好
項目框架:SpringMVC
項目結構:上部導航欄中每一個tab對應一個controller,當點擊tab時,此時就會重新加載頁面,頁面被初始化,查詢條件被清空
思考過和使用過的解決辦法:
1、將上述7個模塊放在同一個頁面中,點擊對應模塊出現對應頁面
問題:此時需要將7個模塊的代碼放置在同一個controller中,代碼冗餘量增大
jsp頁面代碼量較大,對於代碼的修改將是一件令人頭痛的事情
由於框架的限制,點擊分頁時,將會出現一次點擊控制多個頁面的頁碼變化(體驗不好)
2、多個iframe疊加,點擊一個tab顯示對應頁面,置頂於其他頁面
問題:此時頁面與頁面還是處於隔離狀態,無法在一個頁面中保存另一個頁面的查詢狀態
3、Spring Cache緩存技術,將每個頁面的查詢狀態保存在緩存中,當再到此頁面時,查詢是否存在查詢狀態,有則顯示
問題:Spring緩存是方法級別的緩存,(一篇很好的緩存文章:註釋驅動的 Spring cache 緩存介紹),文章中提到在方法上添加註解,可以將方法中的參數作爲key,方法的返回結果作爲value保存在緩存中;我的問題在於,我的方法返回結果是SpringMVC中的view路徑,而我想要緩存的是從前臺頁面傳回來的查詢參數
4、頁面緩存--H5 localStorage
問題:localStorage是緩存在本地,當瀏覽器關閉時同樣存在,啓動瀏覽器時,上次的查詢狀態同樣會顯示
我並不需要它存留很長時間,所以緩存在本地是不能滿足要求的
小技巧:瀏覽器工具(F12)打開Application可以查看緩存
5、頁面緩存--Sessionstorage (最終解決方案採納)
Sessionstorage 和 localstorage都是H5中針對cookie緩存大小不夠出的解決方案,兩者有些不同
可查看文章:http://blog.csdn.net/fcdd123/article/details/56286106
最終採納這種解決方案,但也有一些不完美,當點擊父tab時無法統一清除緩存(即清除7個模塊的查詢狀態)
由於Sessionstorage 和 localstorage都只在當前頁面有效,所以就採用了一種笨方法,使用HttpSession保存一個考勤審覈鏈接帶過來的參數index,再在七個controller中獲取並攜帶到頁面中,根據index是否等於某個值來判斷是否清除當前頁的查詢狀態