velocity template - 不添加引号的数组 - 尝试创建JSON数组

时间:2017-07-26 00:30:46

标签: java velocity

我正在尝试创建一个JSON数组:

#set ($arrayCarousel = [])
#foreach ($image in $product.images)
  #set ($index = $index + 1)
  $arrayCarousel.add("
    <div class='carousel__slide u-center'>
      <img id='${index}' data-code='${product.code}' class='main_image' src='${image}' data-count='$!{product.viewCount}' />
    </div>"
  )
#end

<script id="prog-img-${product.code}" type="text/cycle">
  ${arrayCarousel}
</script>

但是,它不会在每个数组项周围创建引号。对速度模板很新,但试图解决这个问题。

1 个答案:

答案 0 :(得分:0)

这个怎么样?

  $arrayCarousel.add("${esc.q}
    <div class='carousel__slide u-center'>
      <img id='${index}' data-code='${product.code}' class='main_image' src='${image}' data-count='$!{product.viewCount}' />
    </div>${esc.q}"
  )

其中esc是对Velocity Tool EscapeTool的引用。

您正在做的是将字符串添加到Java列表中。该字符串像往常一样用双引号分隔。如果您希望该值包含双引号,则需要添加它们,转义。

然而,该代码非常脆弱。如果product.codeimage包含双引号,则会破坏您的JSON。

另外,请注意,您依赖的ArrayList.toString()表示与有效的JavaScript数组非常相似。这似乎也有点脆弱。