如何将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
相关产品推荐
相关产品推荐

