2016-08-09 119 views
1

我有3個JSP視圖都使用相同的JS文件(比如app.js)。如何加載Spring MVC視圖,而無需重新加載js文件

我的用戶界面位於AngularJS上,它對每個JSP視圖都有不同的控制器,並且還具有在控制器之間共享信息的自定義服務。當我加載第一個JSP時,它在app.js文件中指定的控制器將在自定義服務中保存一個值。當我加載下一個JSP文件時,app.js被重新加載,因此保存在自定義服務中的值將丟失。

有沒有辦法不重新加載JS文件?或者有更好的方法去解決這個問題嗎?

+0

要麼把價值在會話變量或靜態變量 –

+0

也許你的問題是你想在瀏覽器中存儲必須存儲在服務器的一些信息。應該在每個請求中發送一個選項並響應此值,以便您可以在所有jsp中共享此值。 – duardito

回答

0

JavaScript變量不會自動保留。當你在瀏覽器中打開一個新的URL時,你不會再次下載JS文件(它們被緩存),但是它們在新頁面中從零開始加載。這意味着所有以前的價值都會喪失,而不是偶然的,而是通過設計。

你有不同的方法來處理頁面問題之間的持久性。一種方法是服務器端通過使用會話:

  • JS部分發送到保存作爲請求的參數的值
  • 彈簧MVC控制器提出的是,在會話
  • 其它視圖(JSP)或控制器(彈簧)訪問保存的值,並傳遞它的響應

的另一種方法是單頁面應用模式:

  • 你只能從服務器
  • 的JavaScript,然後只發送請求,它直接處理修改DOM

另外加載一個單一的整頁,你可以使用Windows.sessionStorage數據客戶端存儲的時間客戶端會話 - 信用應該去@AmitParashar這個,他的答案更多的細節。

你當然也可以混合2種模式(這在實際應用中常見的做),但你必須知道,每一個頁面負載將刪除所有客戶端的JavaScript狀態

一個不太常見的模式(據我所知)是把狀態放入cookie中。這樣,就可以通過服務器共享及客戶端,但:

  • 它僅限於4K大小
  • 你不能將它用於服務器端的安全性,因爲它太容易被僞造
+1

否客戶端會話的概念? Window.sessionStorage可以使用。 –

+0

@AmitParashar:感謝您的注意。我已經更正了我的答案,並且讓你相信這一點。 –

+0

謝謝謝爾:)。 –

1

如果您無法控制服務器,則可以將數據保存在瀏覽器的會話存儲對象中,以便在請求之間保留數據並在完成時清除它。 https://developer.mozilla.org/en/docs/Web/API/Window/sessionStorage

// Save data to sessionStorage 
sessionStorage.setItem('key', 'value'); 

// Get saved data from sessionStorage 
var data = sessionStorage.getItem('key'); 

// Remove saved data from sessionStorage 
sessionStorage.removeItem('key') 
+0

我確實有控制服務器端,因爲這是更安全的,我使用會話屬性來保存它們。不管怎麼說,還是要謝謝你 :) – javaGirl243