2015-07-16 13 views
6

Ich bin ein Thymeleaf Anfänger. begann ich mit einem gemeinsamen Layout-Seite:Kopf und Titel in Thymeleaf

Fragmente/layout.html

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head th:fragment="headerFragment"> 
    <title>Template title</title> 
    <!-- metas, link and scripts --> 
</head> 
<body> 
    <div class="container"> 
     Some text 
    </div> 
</body> 
</html> 

Und eine Content-Seite:

seite.html

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head th:include="fragments/layout :: headerFragment"> 
    <title>Page title</title> 
    <!-- metas, link and scripts --> 
</head> 
<body> 
    <div class="container"> 
     Some text 
    </div> 
</body> 
</html> 

Als ich Rendern Sie die Seite, der Titel stammt immer von der Vorlage, nicht von der Seite. Ist es in Thymeleaf möglich, Metas, Skripte und Stil gemeinsam (in der HEAD-Tag) zu haben, aber eine pro Seite Titel zu haben?

Antwort

4

Sie können sogar kombinieren;) Verwenden Sie Folgendes auf der Vorlagenseite.

<title layout:title-pattern="$DECORATOR_TITLE - $CONTENT_TITLE"> 
    Template title 
</title> 

In Ihrem Fall wäre dies löst in:

<title>Template title - Page Title</title> 
0

Nach dem documentation th: umfassen den Inhalt eines Fragments in die darunter div enthält. So erhalten Sie den Titel der Vorlage. Sie können ein Attribut für den Seitentitel wie folgt verwenden und seinen Wert in jedem Controller festlegen.

<head th:fragment="headerFragment"> 
    <title>${pagetitle}</title> 
    <!-- metas, link and scripts --> 
</head> 

Alternativ können Sie Layout-Dialekte verwenden, um das gleiche wie hier beschrieben zu erreichen. Thymeleaf layout dialect and th:replace in head causes title to be blank

10

ich auch dieses Problem wurde mit (Danke nmy für die documentation Referenzierung!) Hier ist, was ich bemerkte, und wie ich es in meiner app gelöst:

Dinge aus der Dokumentation zu beachten:

  1. Die Unterschiede zwischen th:include und th:replace
  2. Fragmente durch domselector Referenzierung statt durch th:fragment
  3. Thymeleaf bietet eine "this" Option für die Suche nach Selektoren

Mit diesen drei Dingen im Kopf, Sie folgendes tun:

Fragmente/layout.html:

<head th:fragment="headerFragment"> 
    <title th:include=":: #pageTitle">Layout Generic Title< /title> 
    <!-- metas, link and scripts --> 
</head> 

Seite. html

<head th:include="fragments/layout :: headerFragment"> 
    <title id="pageTitle">Page title</title> 
    <!-- other elements you want to reference in your layout --> 
</head> 

Hoffe, das hilft!

6

Auschecken Parameterizable fragment signatures.

Grundsätzlich in Ihrem Fragment:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head th:fragment="headerFragment (pageTitle)"> 
    <title th:text="${pageTitle}>Template title</title> 
    <!-- metas, link and scripts --> 
</head> 
<body> 
    <div class="container"> 
     Some text 
    </div> 
</body> 
</html> 

Dann, in dem Sie es verwenden:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head th:replace="fragments/layout :: headerFragment (pageTitle='Bla Bla Some Title'"> 
    <title>Page title</title> 
    <!-- metas, link and scripts --> 
</head> 
<body> 
    <div class="container"> 
     Some text 
    </div> 
</body> 
</html> 
+1

Dank, das funktioniert perfekt. – DimaSan

1

Diese Arbeit für mich ..

Layout

<head th:fragment="headerfragment"> 
    <title th:text="${pageTitle}">Template Title</title> 

Seite

<head th:include="layout :: headerfragment"> 

auf meinem -Controller

m.addAttribute("pageTitle", "Dashboard Page");