为啥 Thymeleaf 代码在 HTML 的 head 部分不起作用但在 body 中工作正常

Posted

技术标签:

【中文标题】为啥 Thymeleaf 代码在 HTML 的 head 部分不起作用但在 body 中工作正常【英文标题】:Why does Thymeleaf code not work in the head section of HTML but works fine in the body为什么 Thymeleaf 代码在 HTML 的 head 部分不起作用但在 body 中工作正常 【发布时间】:2016-09-30 11:13:55 【问题描述】:

我正在使用 wro4j 来缩小静态内容。但是,当我在我的开发环境中时,我想使用我的 JS 和 CSS 文件的未压缩版本。

具体来说,我使用的是 Spring Boot 和 Thymeleaf。

此代码在我的 html<head></head> 中不起作用:

<th:block th:if="$@environment.getActiveProfiles()[0] != 'development'">
    <link th:href="@/wro4j/compressed.css" rel="stylesheet"></link>
</th:block>
<th:block th:if="$@environment.getActiveProfiles()[0] == 'development'">
    <link th:href="@/css/uncompressed.css" rel="stylesheet"></link>
</th:block>

我从上面的 HTML 源代码中看到的是:

<link rel="stylesheet" href="/wro4j/compressed.css" />

<link rel="stylesheet" href="/css/uncompressed.css" /> 

当然,应该包含的唯一 css 是 uncompressed.css,因为我在“application.yml”中将我的配置文件设置为 development

但是,如果我在 &lt;body&gt;&lt;/body&gt; 中执行以下操作,它将按我的预期完美运行:

<th:block th:if="$@environment.getActiveProfiles()[0] == 'development'">
    <div th:text="$@environment.getActiveProfiles()[0]"></div>
</th:block>
<th:block th:if="$@environment.getActiveProfiles()[0] != 'development'">
    <div th:text="'WHAT THE HECK!' + $@environment.getActiveProfiles()[0]"></div>
</th:block>

application.yml 中将我的 spring 配置文件设置为 development,我希望从后一个块中看到的是“开发”而不是“这到底是什么!开发”,这正是我知道了。那么为什么在我的 HTML 的 head 部分中,相同的代码的行为不符合我的预期。

我错过了什么?

【问题讨论】:

见this bug。您可以直接在link 上使用th:if,在另一个上使用th:unless @BoristheSpider 您应该将此作为解决方案发布,以便可以接受 @hamster 为开发和生产更改文件名的另一种选择是根据环境以不同的方式构建文件。 Gulp 或 Webpack 等工具效果很好。它们也可以集成到 Maven 和 Gradle 项目中。有点超出了这个问题的范围,但我想我还是会提到它。 【参考方案1】:

感谢@Boris 对我的问题的评论,解决方案是使用 Thymeleaf 版本 3。但是作为一种解决方法,这是我暂时所做的:

<link th:if="$@environment.getActiveProfiles()[0] != 'development'"  th:href="@/wro4j/all.css" rel="stylesheet" />

<script  th:if="$@environment.getActiveProfiles()[0] == 'development'" th:src="@/bootstrap/js/bootstrap.min.js"></script>

【讨论】:

以上是关于为啥 Thymeleaf 代码在 HTML 的 head 部分不起作用但在 body 中工作正常的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 Spring Boot/Thymeleaf 按钮会隐藏我的数据或根本不起作用?

thymeleaf测试结果很糟糕,为啥Spring还要推荐使用它?

SpringBoot整合Thymeleaf-基于SpringBoot2.X版本

为啥 html 元素中的 Html 文本不与 Thyme-leaf 文本连接?代码是[重复]

当我在括号中调用它时,Thymeleaf 不会解析我的应用程序中的片段。这是为啥?

Spring Boot使用thymeleaf模板