Alexandru Severin
Alexandru Severin

Reputation: 6228

Process Thymeleaf variable as HTML code and not text

I'm using Thymeleaf to process html templates, I understood how to append inline strings from my controller, but now I want to append a fragment of HTML code into the page.

For example, lets stay that I have this in my Java application:

String n="<span><i class=\"icon-leaf\"></i>"+str+"</span> <a href=\"\"></a>\n";

final WebContext ctx = new WebContext(request, response, 
                                      servletContext, request.getLocale());
ctx.setVariable("n", n);

What do I need to write in the HTML page so that it would be replaced by the value of the n variable and be processed as HTML code instead of it being encoded as text?

Upvotes: 102

Views: 95291

Answers (3)

metadevj
metadevj

Reputation: 37

Staring with Thymeleaf 3.0 the html friendly tag would be:

<div class="mailbox-read-message" data-th-utext="*{body}">

Upvotes: 0

michal.jakubeczy
michal.jakubeczy

Reputation: 9469

If you want short-hand syntax you can use following:

[(${variable})]

Escaped short-hand syntax is

[[${variable}]]

but if you change inner square brackets [ with regular ( ones HTML is not escaped.

Example within tags:

<div>
    [(${variable})]
</div>

Upvotes: 21

michal.kreuzman
michal.kreuzman

Reputation: 12390

You can use th:utext attribute that stands for unescaped text (see documentation). Use this with caution and avoid user input in th:utext as it can cause security problems.

<div th:remove="tag" th:utext="${n}"></div>

Upvotes: 168

Related Questions