JavaScript中从velocity模板动作获取文本

bvn4nwqk  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(126)

在前面,我从velocity action中获取文本,并尝试将其放入js变量中:

<script>
const text = {
#foreach($resource in ${messages.getResourcesWithPrefix('path.to.keys')})
  '$!{resource.getKey()}': '$!{resource.getValue().replace("'", "")}',
#end
}
</script>

当加载velocity模板并且文本在更多行中(用回车符分隔)时,就会出现问题,例如:

console.log(text)
//const text = {
//'key1': 'value in one line'
//'key2': 'value in first line❌
//value in second line.'
...

js error抛出:

Uncaught SyntaxError: Invalid or unexpected token (at doc.do)

有没有可能用JavaScript在前面避免这个错误,或者用Java在后面避免这个错误?
顺便说一句,如果它是直接加载在速度模板的html,如:

#foreach($resource in ${messages.getResourcesWithPrefix('path.to.keys')})
  <div>'$!{resource.getKey()}': '$!{resource.getValue().replace("'", "")}'</div>
#end

一切正常。

83qze16e

83qze16e1#

你的问题的根源与Velocity无关,而是Json字符串不能是多行的。
您需要将回车替换为文字'\n'字符串,如下所示:

<script>
const text = {
#foreach($resource in ${messages.getResourcesWithPrefix('path.to.keys')})
  '$!{resource.getKey()}': '$!{resource.getValue().replace("'", "").replaceAll("\n", "\\n")}',
#end
}
</script>

相关问题