For example, my controller method in Spring does this:
model.addAttribute("view_name", "foobar")
And I'm trying to do this in my Thymeleaf template:
<link th:href="@{/resources/libs/css/${view_name}.css}" rel="stylesheet" />
But the rendered result is this:
<link href="/app/resources/libs/css/${view_name}.css" rel="stylesheet" />
So it's not replacing the ${view_name}
like I'm expecting.
What am I doing wrong? In general, how do you nest expressions like that in Thymeleaf?
Since you are not starting the url rewrite with an expression (e.g. ${...}
, #{...}
, |...|
, __...__
, 'quoted string'
, ...), Thymeleaf will consider the whole expression as a String
and not execute any of the inner expressions.
The following example would work because it starts with an expression.
@{${attribute}}
For your example you have the following possibilities
Literal substition (preferred method)
You can do literal substitions in a String
with the pipeline syntax (|
).
<link th:href="@{|/resources/libs/css/${view_name}.css|}" rel="stylesheet" />
String concatenation
<link th:href="@{'/resources/libs/css/' + ${view_name} + '.css'}" rel="stylesheet" />