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

时间:2014-02-27 04:52:44

标签: spring spring-mvc template-engine thymeleaf

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

1 个答案:

答案 0 :(得分:28)

由于您没有使用表达式启动网址重写(例如${...}#{...}|...|__...__'quoted string',...) ,Thymeleaf会将整个表达式视为String而不执行任何内部表达式。

以下示例将起作用,因为它以表达式开头。

@{${attribute}}

对于您的示例,您有以下可能性

Literal substition (首选方法)

您可以使用管道语法(String)在|中进行文字替换。

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

字符串连接

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