Thymeleaf/Spring MVC - How do you nest variables/expressions in a Link expression?

spring, spring-mvc, template-engine, thymeleaf

Solution

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" />

Problem

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?

Original source