2016-06-01 26 views
3

我正在使用wro4j來縮小靜態內容。但是,當我在我的開發環境中時,我想使用我的JS和CSS文件的未壓縮版本。爲什麼Thymeleaf代碼不能在HTML的頭部工作,但在正文中工作正常

把它放到上下文中,我使用的是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

但是如果我做這樣的事情在<body></body>下,將工作完全如我所料:

<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已經把我的春天輪廓發展,我希望看到從後者的塊是「發展」,而不是「發展」,這正是我所看到的。那麼爲什麼相同的代碼在我的HTML的頭部沒有像我期望的那樣運行。

我錯過了什麼?

+3

參見[這個bug(HTTPS ://github.com/thymeleaf/thymeleaf/issues/246)。你可以直接在'link'上直接使用'th:if',並在另一個上使用'th:unless'。 –

+0

@BoristheSpider您應該將此作爲解決方案發布,以便與之相關 –

+0

@hamster另一種更改開發和生產文件名的選擇是基於環境構建不同的文件。像Gulp或Webpack這樣的工具很好用。它們也可以集成到Maven和Gradle項目中。稍微超出這個問題的範圍,但我想我會提及它。 –

回答

1

感謝@鮑里斯對我的問題的評論,該解決方案是使用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> 
相關問題