Je suis un débutant à Thymeleaf . J'ai commencé avec une page de présentation commune:
fragments/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>
Et une page de contenu:
page.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>
Lors du rendu de la page, le titre provient toujours du modèle, pas de la page . Est-il possible dans Thymeleaf d'avoir des métas, des scripts et un style en commun (dans la balise HEAD) par page titre?
J'avais aussi ce problème (merci nmy pour avoir référencé la documentation !) Voici ce que j'ai remarqué et comment je l'ai résolu dans mon application:
Points à noter dans la documentation:
th:include
et th:replace
th:fragment
this
" pour trouver des sélecteursAvec ces 3 choses à l'esprit, vous pouvez faire ce qui suit:
fragments/layout.html:
<head th:fragment="headerFragment">
<title th:include=":: #pageTitle">Layout Generic Title< /title>
<!-- metas, link and scripts -->
</head>
page.html
<head th:include="fragments/layout :: headerFragment">
<title id="pageTitle">Page title</title>
<!-- other elements you want to reference in your layout -->
</head>
J'espère que cela t'aides!
Check out Signatures de fragments paramétrables .
En gros, dans votre 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>
Ensuite, où vous l'utilisez:
<!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>
Vous pouvez même les combiner;) Utilisez les éléments suivants dans la page de modèle.
<title layout:title-pattern="$DECORATOR_TITLE - $CONTENT_TITLE">
Template title
</title>
Dans votre cas, cela résoudrait en:
<title>Template title - Page Title</title>
C'est la meilleure solution que j'ai trouvée:
<th:block th:fragment="header">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" charset="UTF-8"/>
<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<!-- Bootstrap Css -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"/>
<!-- Fontawesome css -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"/>
<!-- JQuery -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</th:block>
<head>
<div th:replace="fragments/headerFragment :: header"></div>
<title>Example</title>
<script src="customStuff"></script>
</head>
Donc, à la fin, vous pouvez avoir un fragment contenant tous les scripts et css dont vous avez besoin dans toutes vos pages et l’ajouter simplement à vos en-têtes, tout en restant capable de
Ce travail pour moi ..
disposition
<head th:fragment="headerfragment">
<title th:text="${pageTitle}">Template Title</title>
page
<head th:include="layout :: headerfragment">
sur mon contrôleur
m.addAttribute("pageTitle", "Dashboard Page");
Selon documentation th: include inclut le contenu d’un fragment dans le fichier div. Ainsi, vous obtiendrez le titre du modèle. Vous pouvez utiliser un attribut pour le titre de la page comme suit et définir sa valeur dans chaque contrôleur.
<head th:fragment="headerFragment">
<title>${pagetitle}</title>
<!-- metas, link and scripts -->
</head>
Vous pouvez également utiliser des dialectes de présentation pour obtenir les mêmes résultats que ceux décrits ici . dialecte de présentation Thymeleaf et th: replace in head entraîne la suppression du titre