Search code examples
velocityvtl

Including literal JSON content in Velocity (avoiding HTML escapes)


I'm trying to use the Velocity engine embedded in Atlassian's products (and exposed through com.atlassian.templaterenderer) to substitute a JSON value into a template.

In the template, this looks a bit like the following:

<script>
  foo = $foo
</script>

However, when I render the template with "foo" mapped to a string ["bar", "baz"], the output is the following:

<script>
  foo = [&quot;bar&quot;, &quot;baz&quot;]
</script>

How can this be avoided?


Solution

  • Atlassian has an event handler which performs escaping on any variable with a name not ending with WithHtml.

    Thus:

    <script>
    foo = $fooWithHtml
    </script>
    

    expands as desired.