如何从jsp外的js中读取模型属性

时间:2014-05-23 09:43:31

标签: javascript jsp spring-mvc modelattribute

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

但是,我想将 javascript 代码移入其自己的文件中,以使jsp文件更具可读性。当我这样做时,它不会再能够找到该modelAttribute。我该如何解决这个问题?

如何从.js -file指向模型属性?

提前致谢!

2 个答案:

答案 0 :(得分:2)

好吧,我已经在我的试验中试图找到并回答这个问题。

实际上,似乎没有直接解决方案,这就是原因:

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

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

    <script type="text/javascript" src="js/actually_javascript.jsp"></script>
    

    它欺骗了Web服务器以处理文件服务器端,但由于上述原因#1,这仍然无法正常工作。如果您将值存储在会话中,它可能会起作用,但在一天结束时,这将是一种丑陋的黑客攻击,您将失去IDE的代码突出显示和完成功能,这将是被愚弄,以为你正在编辑一个实际的 .jsp 文件。不推荐。

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

    • 让Javascript成为 .jsp 文件的一部分,在&lt; script&gt;中标签
    • 将Javascript放在自己的 .js 文件中,但仍然使用&lt; script&gt; .jsp 页面中的标记,用于初始化您在 .js 文件中编写的模块,并传递请求中的值,例如 $ {varName}

答案 1 :(得分:0)

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

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

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

在javascript文件中定义init-method:

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

请记住,为此,您需要确保模型属性输出具有正确的javascript语法。