2014-02-27 22 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