【问题标题】:Thymeleaf/Spring MVC - How do you nest variables/expressions in a Link expression?Thymeleaf/Spring MVC - 你如何在链接表达式中嵌套变量/表达式?
【发布时间】:2014-03-30 08:08:29
【问题描述】:

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

【问题讨论】:

    标签: spring spring-mvc template-engine thymeleaf


    【解决方案1】:

    由于您没有使用表达式开始 url 重写(例如 ${...}#{...}|...|__...__'quoted string',...),Thymeleaf 会将整个表达式视为 @ 987654326@ 并且不执行任何内部表达式。

    以下示例可以使用,因为它以表达式开头。

    @{${attribute}}
    

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

    文字替换(首选方法)

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

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

    字符串连接

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

    【讨论】:

    • 谢谢!为什么文字替换是首选方法?
    • 您知道如何取消转义自定义属性吗?我正在尝试输出ng-include="/hp-dsat/resources/html/report-tab-divs/supported-data-report.html"th:attr="ng-include=@{/resources/html/report-tab-divs/mainreport.html}",但我真的希望它输出ng-include="'/hp-dsat/resources/html/report-tab-divs/supported-data-report.html'"(注意额外的单引号)。我如何让 ThymeLeaf 给我用双引号内的单引号包裹的完整上下文路径?
    • 我尝试在父元素上设置th:inline="none",然后执行ng-include="'[[@{/resources/html/report-tab-divs/mainreport.html}]]'",但这也不起作用;百里香叶不管它。
    • 非常感谢!我无法在任何地方找到文字替换,但这正是我所需要的。
    • @trusktr 你试过'''...''' 吗? (三单引号)
    猜你喜欢
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2018-11-29
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多