javascript - 在 javascript 中使用 Spring 变量

标签 javascript java spring spring-mvc

我正在尝试在 javascript 中使用 Spring 变量:

Map<String, List<String>> states;

然后我找到了一些信息here

所以我尝试了:

<script th:inline="javascript">
  /*<![CDATA[*/ 
    var xxx = ${states};
    console.log(xxx);
  /*]]>*/
</script>

在我的浏览器的源选项卡中,我有类似的内容:

var xxx = {STATE1=[a, b, c, d]};
console.log(xxx);

错误是:Uncaught SyntaxError: Invalid shorthand property initializer

我也尝试过:var xxx =/*[[${states}]]*/'foo'; 如果我打印 console.log(xxx),我得到了 'foo'

最佳答案

此错误是由于 {STATE1=[a, b, c, d]} 是无效的 Javascript 对象。

解释非常简单:您看到的是服务器端渲染的产品(您正在使用 Thymeleaf,就像我通过 th:inline 标签建议的那样)。因此,在服务器上,您的 map 对象将呈现为 {STATE1=[a, b, c, d]} 字符串。在您的客户端(浏览器)上,您将获得包含此字符串的页面,仅此而已。已经没有任何 Java 对象。只是字符串。并且这个字符串是Javascript中对象的无效初始化。

所以你根本不能以这种方式使用 map 。您不能使用 JSON.parse 解析它,因为它是无效的 JSON(应该使用 : 而不是 =)。

希望这对您有所帮助!

附言如果您尝试在 Javascript 中将 = 替换为 :,它将以不同于您预期的方式工作:数组 [a, b, c, d] 将被视为名称为 abcd 的变量数组,因此您将不得不在 '' 中丢失它。但我建议放弃这个想法并重新考虑你的方法。这不是它应该使用的方式。

关于javascript - 在 javascript 中使用 Spring 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45933850/

相关文章:

java - NewProxyCallableStatement 无法转换为 SQLServerCallableStatement

java - 我得到 [Ljava.lang.Object;@ 而不是 JTable 上的数据

javascript - 如何在同一页面中多次重复使用 JavaScript 函数?

php - 谷歌地图标记 : Need option for 'Get Directions'

javascript - 使用 JavaScript 每 x 秒添加一次 CSS 整数

Java MD5 哈希,我该怎么办?

java - 使用 spring data mongodb 和 kotlin 更新对象不起作用

java - 如何避免响应错误: 429 Too Many Requests

java - 如何在camel蓝图中引用 "disable"bean?

javascript - 如何使用 JavaScript 或 jQuery 构建内嵌评级?