在导入的js文件中访问Spring MVC Model数据

时间:2015-06-08 17:10:55

标签: java javascript spring jsp spring-mvc

我正在使用Spring MVC开发一个项目,其中java作为后端,HTML(JSP)/ CSS / JS作为前端。 在我的java控制器中,我将数据添加到模型中,如此

--onto

我可以像这样轻松访问JSP文件中的

model.addAttribute("someData", theData);

对我来说问题是这只适用于我的JSP文件。我正在导入其他css和js文件,如

${theData} or "${theData}"

他们似乎无法访问该模型。我知道客户端在运行时没有模型,但javascript文件由服务器以与HTML / JSP文件相同的方式提供,所以为什么这不起作用?或者我必须使用哪种设置?

我意识到我的JSP文件中的内联js代码有效,但这不是很灵活,只是不是真正的"我的解决方案。另外,我想避免额外调用服务器(如AJAX)来获取我的数据。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

  

...但是javascript文件由服务器以与HTML / JSP文件相同的方式提供...

不,这不是真的。静态JavaScript,CSS和HTML文件由Web服务器按原样提供,无需处理。你的例子中的EL片段......

<script src="<c:url value='/resources/javascript/main.js'/>"></script>

...仅根据您作为函数参数提供的相对URL生成具体URL。没有嵌入main.js是什么或做什么的知识。您的JSP文件由Java servlet容器显式处理。这就是为什么它了解您的应用程序,bean,模型等等。这是一个粗略的过度简化,但希望它得到了重点。

修改

您可以在JSP中使用静态文件中的JSON,但是您必须在应用程序的bean中读取,处理和存储它们作为Java对象。我不知道你为什么要这样做,因为通过JavaScript阅读JSON数据非常容易。

答案 1 :(得分:1)

willOEM为您提供了良好的背景知识。因此,静态文件不知道模型值,但也不需要这样,因为您始终可以编写出自己的代码。

如果你在jsp中调用main.js中的任何函数,那么你应该使用${theData}作为函数参数。如果没有,你总是可以在dom元素上使用数据属性,在那里存储你的模型变量,并在你的js文件中访问它,所以像

<div data-the-data="${theData}">Lorem ipsum</div>

答案 2 :(得分:0)

我已经解决了#34;现在通过在html文档中定义数据绑定内联

var theData = "{theData}";

然后在我的标准javascript文件中使用它。 不是很完美,但似乎是最好的解决方案。