Java 为什么Thymeleaf代码在HTML的头部分不起作用,但在主体部分却可以很好地工作

Java 为什么Thymeleaf代码在HTML的头部分不起作用,但在主体部分却可以很好地工作,java,html,spring-boot,thymeleaf,wro4j,Java,Html,Spring Boot,Thymeleaf,Wro4j,我正在使用wro4j缩小静态内容。但是,当我在我的开发环境中时,我希望使用JS和CSS文件的未压缩版本 把它放到上下文中,我使用的是Spring Boot和Thymeleaf 此代码在my HTML的中不起作用: <th:block th:if="${@environment.getActiveProfiles()[0] != 'development'}"> <link th:href="@{/wro4j/compressed.css}" rel="styleshee

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

把它放到上下文中,我使用的是Spring Boot和Thymeleaf

此代码在my HTML的
中不起作用:

<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

但是,如果我在
中执行以下操作,它将如我所期望的那样完美工作:

<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部分中预期的不一样呢


我遗漏了什么?

感谢@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>


请参阅。您只需直接在
链接上使用
th:if
,在另一个链接上使用
th:except
。@Boristeider您应该将此作为解决方案发布,这样就可以了accpeted@hamster更改开发和生产文件名的另一种选择是根据环境以不同方式构建文件。像Gulp或Webpack这样的工具非常有用。它们也可以集成到Maven&Gradle项目中。有点超出了这个问题的范围,但我还是想提一下。