在javascript中使用Spring变量

Nik*_*Nik 5 javascript java spring spring-mvc

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

Map<String, List<String>> states;
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一些信息

所以我试过了:

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

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

var xxx = {STATE1=[a, b, c, d]};
console.log(xxx);
Run Code Online (Sandbox Code Playgroud)

而错误是:Uncaught SyntaxError: Invalid shorthand property initializer.

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

Nik*_*Nik 1

我使用您的评论解决了我的问题:

1)缺少单引号:

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

2)对象必须被解析为:

  var hashmap = $.parseJSON(xxx);
Run Code Online (Sandbox Code Playgroud)

3)在我需要序列化我的对象之前(这不是ajax调用,所以我需要手动序列化它):

Map<String, List<String>> states...
  model.addAttribute("states", new ObjectMapper().writeValueAsString(states));
Run Code Online (Sandbox Code Playgroud)

所以现在我可以读取我的对象:

var myList = hashmap['STATE1'];
console.log(myList ) 
Run Code Online (Sandbox Code Playgroud)

将打印[a, b, c, d],我可以循环:

for(i in myList ){
  console.log(myList[i]);
}
Run Code Online (Sandbox Code Playgroud)