You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Spring控制器传递的数组正确赋值给JavaScript变量?

这个问题我之前踩过坑!本质是Thymeleaf默认会把Model里的对象转成字符串表示并自动加上引号包裹,而我们需要的是直接输出原生JSON格式的数组。下面给你两种靠谱的解决方法:

方法一:使用JavaScript内联(推荐)

这是Thymeleaf处理JS变量最规范的方式,开启内联后,框架会自动把Java集合/数组序列化为合法的JSON格式:

<script th:inline="javascript">
    // 用[(...)]非转义内联表达式,直接输出JSON数组
    var array = [(${array})];
</script>

关键点说明:

  • th:inline="javascript":告诉Thymeleaf这个script标签里包含需要特殊处理的内联表达式
  • [(${array})]:非转义内联语法,会直接把Model里的数组/List序列化为原始JSON数组(比如[1,2,3,5]),不会添加多余的引号

方法二:使用不转义文本输出

如果不想用内联语法,也可以通过th:utext拼接JavaScript代码,确保输出内容不被转义:

<script th:utext="'var array=' + ${array} + ';'"></script>

这里th:utext会直接输出拼接后的内容,Thymeleaf会自动把${array}序列化为JSON数组,最终生成的代码就是你需要的var array=[1,2,3,5];

额外注意

  • 确保控制器传递的是Java数组或者List集合(比如model.addAttribute("array", Arrays.asList(1,2,3,5));),而不是已经转成字符串的数组
  • 如果是复杂对象数组,Thymeleaf也会自动序列化为合法的JSON对象数组,完全兼容JavaScript

内容的提问来源于stack exchange,提问作者user2893186

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:53:15