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

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?

Answers


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

Need Your Help

Simple_form how to make accept terms checkbox inline

html css ruby-on-rails twitter-bootstrap simple-form

&lt;p&gt;&lt;%= f.input :terms, :as =&gt; :boolean, :label =&gt; false, :boolean_style =&gt; :inline %&gt;