在JavaScript中访问Java / Servlet / JSP / JSTL / EL变量
问题的原因是希望在JavaScript中访问Java / Servlet / JSP / JSTL / EL变量。解决方法是将Java变量打印为JavaScript变量,并确保生成的HTML / JS代码输出是语法上有效的。
在JSP中,可以通过以下几种方式打印Java变量:
...
假设Java变量的值为"bar",那么JSP将生成以下HTML代码:
...
需要注意的是,为了表示JS中的字符串类型变量,这些单引号是必需的。如果使用了`var foo = ${foo};`,那么将打印`var foo = bar;`,在尝试在JS代码中进一步访问时可能会出现"bar is undefined"错误(可以在浏览器的Web开发工具的JS控制台中查看JS错误,按F12在Chrome / FireFox23+ / IE9+中打开)。还要注意,如果变量表示一个不需要引号的数字或布尔值,那么它将正常工作。
如果变量来自用户控制的输入,请注意考虑XSS攻击漏洞和JS转义。在我们的EL Wiki页面的底部,您可以找到一个示例,该示例演示了如何创建一个自定义EL函数,用于在JS中安全使用Java变量。
如果变量更复杂,例如一个Java bean,或者是一个列表,或者是一个映射,则可以使用许多可用的JSON库将Java对象转换为JSON字符串。以下是一个示例,假设使用Gson:
String someObjectAsJson = new Gson().toJson(someObject);
使用此方法时,不再需要将其打印为带引号的字符串。
其他相关的参考链接:
- [Our JSP wiki page](https://stackoverflow.com/tags/jsp/info) - 查看"JavaScript"章节。
- [How to escape JavaScript in JSP?](https://stackoverflow.com/questions/9708242/)
- [Call Servlet and invoke Java code from JavaScript along with parameters](https://stackoverflow.com/questions/2132242)
- [How to use Servlets and Ajax?](https://stackoverflow.com/questions/4112686/)
希望我的回答对您有所帮助。