如何在不重新加载js文件的情况下加载Spring MVC视图

时间:2016-08-09 05:02:40

标签: angularjs jsp spring-mvc

我有3个JSP视图,它们都使用相同的JS文件(比如app.js)。

我的UI位于AngularJS上,它为每个JSP视图提供了不同的控制器,并且还具有在控制器之间共享信息的自定义服务。当我加载第一个JSP时,app.js文件中指定的控制器会在自定义服务中保存一个值。当我加载下一个JSP文件时,会重新加载app.js,因此自定义服务中保存的值将丢失。

有没有办法不重新加载JS文件?或者有更好的方法来解决这个问题吗?

2 个答案:

答案 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')

答案 1 :(得分:0)

不会自动保留Javascript变量。当您在浏览器中打开新URL时,不会再次下载JS文件(它们被缓存),但是在新页面中从头开始 。这意味着所有以前的值都会丢失,不是偶然而是设计。

您有不同的方法来处理页面问题之间的持久性。一种方法是使用会话服务器端:

  • js部分发送值以保存为请求的参数
  • spring-mvc控制器将其放入会话
  • 其他视图(jsp)或控制器(spring)访问保存的值并将其传递给响应

另一种方法是单页面应用程序模式:

  • 您只从服务器加载一个完整页面
  • 然后javascript只发送它直接处理的请求以修改DOM

此外,您可以使用Windows.sessionStorage在客户端会话期间存储数据客户端 - 应该在@AmitParashar中获得此信用,在答案中提供更多详细信息。

你当然可以混合2种模式(这通常在现实世界的应用程序中完成),但你必须知道每个页面加载都会擦除所有客户端的javascript状态

不太常见的模式(AFAIK)是将状态置于cookie中。这样它可以由服务器和客户端共享,但是:

  • 限制为4k大小
  • 您无法将其用于服务器端安全性,因为它很容易被伪造