如何将Freemarker序列转换为Javascript数组?
解决Freemarker序列转Javascript数组的问题
直接输出Freemarker序列会报错,因为${...}语法要求输出的是可自动转为字符串的类型(字符串、数字、日期、布尔等),而序列(Sequence)不符合这个要求。下面是两种可行的解决方式:
方法一:使用?js_string内置函数(推荐)
Freemarker提供了专门的内置函数?js_string,可以把Freemarker对象直接转换为合法的JavaScript字面量,序列会自动转为JS数组格式:
var myValues = ${values?js_string};
执行后会生成符合JS语法的数组:
var myValues = ["Joe", "Sally", "Sue"];
这个函数还会自动处理字符串中的特殊字符(比如引号、换行符),避免JS语法错误或XSS风险。
方法二:手动遍历序列拼接数组
如果你的Freemarker版本较旧,没有?js_string函数,可以通过遍历序列手动构建JS数组:
var myValues = [ <#list values as val> "${val?js_string}"<#if val_has_next>,</#if> </#list> ];
这里给每个元素加上?js_string是为了确保字符串内容符合JS语法规范,同时用val_has_next判断是否添加逗号,避免数组末尾出现多余逗号导致语法错误。
内容的提问来源于stack exchange,提问作者Walker Farrow
相关产品推荐
相关产品推荐

