Thymeleaf / Spring MVC-如何在链接表达式中嵌套变量/表达式?


问题内容

例如,我在Spring中的控制器方法就是这样做的:

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中嵌套这样的表达式?


问题答案:

既然你没有与表达起始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" />