2016-06-01 16 views
3

I wro4j bin mit statischen Inhalten minify. In meiner Entwicklungsumgebung möchte ich jedoch die unkomprimierten Versionen meiner JS- und CSS-Dateien verwenden.Warum Thymeleaf Code funktioniert nicht im Kopfteil von HTML, sondern arbeitet im Körper feinen

Um es in einen Kontext zu setzen, ich bin mit Frühlings-Boot und Thymeleaf.

Dieser Code nicht in den <head></head> meine HTML funktioniert:

<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> 

Was ich aus dem Code oben in der Quelle meiner HTML sehen ist:

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

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

Sicherlich die einzige css, dass sollte uncompressed.css enthalten sein, da ich mein Profil auf Entwicklung in 'application.yml' eingestellt habe.

Allerdings, wenn ich in der <body></body> so etwas wie die folgenden tun wäre, würde es perfekt arbeiten, wie ich erwarten:

<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> 

mein Federprofil Entwicklung gesetzt Nachdem in application.yml, was ich erwarten würde, um zu sehen, Von letzterem Block ist "Entwicklung" und nicht "WAS DIE HECK! -Entwicklung" und genau das sehe ich. Warum verhält sich derselbe Code nicht wie erwartet im Kopfbereich meines HTML-Codes?

Was fehlt mir?

+3

See [dieser Fehler] (https : //github.com/thymeleaf/thymeleaf/issues/246). Sie können einfach "th: if" direkt auf dem "link" verwenden und "th: other" auf dem anderen verwenden. –

+0

@BoristheSpider Sie sollten dies als eine Lösung veröffentlichen, damit es –

+0

@hamster Eine alternative Option zum Ändern der Dateinamen für Entwickler & Produktion accpeted werden kann wäre es, die Dateien unterschiedlich auf die Umwelt basiert zu bauen. Tools wie Gulp oder Webpack funktionieren großartig. Sie können auch in Maven & Gradle-Projekte integriert werden. Ein bisschen über den Rahmen dieser Frage hinaus, aber ich dachte, ich würde es trotzdem erwähnen. –

Antwort

1

Dank @ Boris Kommentar auf meine Frage, ist die Lösung Thymeleaf Version 3 jedoch als Behelfslösung dieses zu verwenden ist, was ich für die Zeit getan haben:

<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>