Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从jsp外部的js读取模型属性_Javascript_Jsp_Spring Mvc_Modelattribute - Fatal编程技术网

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

Javascript 如何从jsp外部的js读取模型属性,javascript,jsp,spring-mvc,modelattribute,Javascript,Jsp,Spring Mvc,Modelattribute,如果我的javascript/jquery代码写在jsp文件中,我可以使用“${varName}”引用Spring的modelAttribute值 但是,我想将javascript代码移动到它自己的文件中,以使jsp文件更具可读性。当我这样做时,它将再也找不到modelAttribute了。我应该如何解决这个问题 如何从.js文件指向模型属性 提前谢谢 好吧,我已经做了实验,试图找到并回答这个问题 实际上,似乎没有直接的解决方案,原因如下: 当您将Javascript代码移动到一个单独的文件时,

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

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

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


提前谢谢

好吧,我已经做了实验,试图找到并回答这个问题

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

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

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

    <script type="text/javascript" src="js/actually_javascript.jsp"></script> 它愚弄了web服务器来处理文件服务器端,但由于上面提到的原因1,这仍然不起作用。如果您将值存储在会话中,它可能会起作用,但最终,这将是一种丑陋的黑客行为,您将失去IDE的代码突出显示和完成功能,这将使您误认为您正在编辑一个实际的.jsp文件。不推荐

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

    • 将Javascript作为标记中.jsp文件的一部分
    • 在自己的.js文件中有Javascript,但在.jsp页面中仍有一个标记,用于初始化在.js文件中编程的模块,并传递来自请求的值,如${varName}

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

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

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

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

    谢谢,这听起来很合理。我想我将使用您的第二个想法,显式调用包含代码的包装器函数,同时将所需的modelAttributes作为jsp文件的参数传递。
    function init(param1, ...) {
        // initialize variables of .js file here
    }