2014-02-27 23 views
8

例如,在春天我控制器的方法做到这一点:Thymeleaf/Spring MVC - 如何在Link表达式中嵌套变量/表达式?

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中嵌入这样的表情?

回答

24

由于您没有与表达式开始的URL重写(例如${...}#{...}|...|__...__'quoted string',...),将Thymeleaf考虑整个表达式作为String和不执行任何内表达式。

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

@{${attribute}} 

为了您的例子中,你有以下几种可能

文字substition(首选方法)

你可以在String文字substitions与管道语法(|)。

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

字符串连接

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

谢谢!为什么Literal替代是首选的方法? – trusktr

+1

因为格式化更容易。 –

+0

你知道如何使用自定义属性吗?我试图做'th:attr =“ng-include = @ {/ resources/html/report-tab-divs/mainreport.html}”'输出'ng-include =“/ hp-dsat/resources/html/report-tab-divs/supported-data-report.html“,但我真的希望它输出'ng-include =''/ hp-dsat/resources/html/report-tab-divs/supported-data -report.html'“'(注意额外的单引号)。我会如何让ThymeLeaf给我一个用双引号内的单引号包裹的完整上下文路径? – trusktr