【问题标题】:How to read model attribute from js outside jsp如何从jsp外部的js读取模型属性
【发布时间】:2014-05-23 09:43:30
【问题描述】:

如果我的 javascript/jquery 代码写在 jsp 文件中,我可以使用 "${varName}" 引用 Spring 的 modelAttribute 值。

不过,我想将 javascript 代码移到它自己的文件中,以使 jsp 文件更具可读性。当我这样做时,它将无法再找到该 modelAttribute 。我应该如何解决这个问题?

如何从 .js 文件中指向模型属性?

提前致谢!

【问题讨论】:

    标签: javascript jsp spring-mvc modelattribute


    【解决方案1】:

    好的,我已经尝试找到并回答这个问题。

    实际上,似乎没有直接的解决方案,原因如下:

    1. 当您将 Javascript 代码移动到单独的文件时,这意味着浏览器将启动单独的请求来获取该文件。因此,您存储在请求范围内的数据(也称为 ${varName})不是获取 .js 文件的请求的一部分;它只是获取 .jsp 文件的请求的一部分。因此,${varName} 值在您的 Javascript 文件中将不可用。

    2. 除此之外的另一个原因:.js 文件没有被 Web 引擎(在这种情况下很可能是 Tomcat)作为服务器端代码处理,因此 ${varName } 文本被完全忽略。为了好玩,我尝试做一个 hack:我将我的脚本文件从 .js 重命名为 .jsp,并在我的 .jsp 中使用它页面:

      它欺骗了 Web 服务器来处理文件服务器端,但这仍然不起作用,因为上面提到的原因 #1。如果您将值存储在会话中,它可能会起作用,但归根结底,这将是一种丑陋的黑客攻击,您会失去 IDE 的代码突出显示和完成功能,这会被愚弄认为您正在编辑一个实际的 .jsp 文件。不推荐。

    总而言之,我认为在 JavaScript 中访问 {$varName} 的唯一方法是:

    • 让 Javascript 成为 .jsp 文件的一部分,在
    • 在自己的 .js 文件中包含您的 Javascript,但在您的 .jsp 页面中仍然有一个

    【讨论】:

    • 谢谢,这听起来很合理。我想我会使用您的第二个想法并显式调用包含代码的包装函数,同时将所需的 modelAttributes 作为参数从 jsp 文件传递​​。
    【解决方案2】:

    您应该通过您的 jsp 文件初始化您的 javascript 文件。

    示例: 在您的 jsp 页面中加载 .js 文件后,为变量的初始化创建一个单独的脚本部分:

    <script src="js-path/file.js"></script>
    <script>
        init(${varFromModel1}, ...);
    </script>
    

    并在您的 javascript 文件中定义 init 方法:

    function init(param1, ...) {
        // initialize variables of .js file here
    }
    

    请记住,要使其正常工作,您需要确保模型属性输出具有正确的 javascript 语法。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 2021-05-30
      • 2011-08-10
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 2020-03-06
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多