Thymeleaf/Spring MVC – Wie verschachtelt man Variablen/Ausdrücke in einem Link-Ausdruck?
-
23-12-2019 - |
Frage
Meine Controller-Methode in Spring macht beispielsweise Folgendes:
model.addAttribute("view_name", "foobar")
Und ich versuche dies in meiner Thymeleaf-Vorlage zu tun:
<link th:href="@{/resources/libs/css/${view_name}.css}" rel="stylesheet" />
Aber das gerenderte Ergebnis ist dieses:
<link href="/app/resources/libs/css/${view_name}.css" rel="stylesheet" />
Es ersetzt also nicht das ${view_name}
wie ich es erwartet habe.
Was mache ich falsch?Wie verschachtelt man solche Ausdrücke im Allgemeinen in Thymeleaf?
Lösung
Da Sie die URL-Umschreibung nicht mit einem Ausdruck starten (z. B. ${...}
, #{...}
, |...|
, __...__
, 'quoted string'
, ...), betrachtet Thymeleaf den gesamten Ausdruck als a String
und keinen der inneren Ausdrücke ausführen.
Das folgende Beispiel würde funktionieren, da es mit einem Ausdruck beginnt.
@{${attribute}}
Für Ihr Beispiel haben Sie folgende Möglichkeiten
Wörtliche Substitution (bevorzugte Methode)
Sie können wörtliche Substitutionen in a vornehmen String
mit der Pipeline-Syntax (|
).
<link th:href="@{|/resources/libs/css/${view_name}.css|}" rel="stylesheet" />
String-Verkettung
<link th:href="@{'/resources/libs/css/' + ${view_name} + '.css'}" rel="stylesheet" />