Thymeleaf / Spring MVC-как вложить переменные / выражения в выражение ссылки?


Например, мой метод контроллера весной делает это:

model.addAttribute("view_name", "foobar")

И я пытаюсь сделать это в моем шаблоне Thymeleaf:

<link th:href="@{/resources/libs/css/${view_name}.css}" rel="stylesheet" />

Но полученный результат таков:

<link href="/app/resources/libs/css/${view_name}.css" rel="stylesheet" />

Так что это не замена ${view_name}, Как я ожидаю.

Что я делаю не так? В общем, как вы можете вложить такие выражения в Thymeleaf?

1 9

1 ответ:

Поскольку вы не начинаете переписывать url-адрес с помощью выражения (например,${...}, #{...}, |...|, __...__, 'quoted string', ...), Thymeleaf будет рассматривать все выражение как String и не выполнять ни одного из внутренних выражений.

Следующий пример будет работать, потому что он начинается с выражения.

@{${attribute}}

Для вашего примера у вас есть следующие возможности

Литеральная подстановка (предпочтительный метод)

Вы можете делать буквальные подстановки в String с синтаксисом конвейера (|).

<link th:href="@{|/resources/libs/css/${view_name}.css|}" rel="stylesheet" />

Конкатенация строк

<link th:href="@{'/resources/libs/css/' + ${view_name} + '.css'}" rel="stylesheet" />