Thymeleaf layout dialect и th: замена в заголовке приводит к тому, что заголовок будет пустым
я следую этому руководству:http://www.thymeleaf.org/doc/layouts.html (добрался до раздела диалекта макета Thymeleaf). Здесь вы можете найти пример:
<!DOCTYPE html>
<html>
<head>
<!--/* Each token will be replaced by their respective titles in the resulting page. */-->
<title layout:title-pattern="$DECORATOR_TITLE - $CONTENT_TITLE">Task List</title>
...
</head>
<body>
<!--/* Standard layout can be mixed with Layout Dialect */-->
<div th:replace="fragments/header :: header">
...
</div>
<div class="container">
<div layout:fragment="content">
...
</div>
<div th:replace="fragments/footer :: footer">© 2014 The Static Templates</div>
</div>
</body>
</html>
нижний колонтитул и заголовок заменяются th:replace
тег в приведенном выше примере, в то время как <head>
и <title>
тег в файл layout.
в принципе, я хочу заменить все <head>
тег th:replace
.
Поэтому у меня есть:
моя файл макета:
<!DOCTYPE html>
<html>
<head th:replace="/html/components/head :: head">
</head>
<body>
<div layout:fragment="content">
</div>
...
<div th:replace="/html/components/footer :: footer" />
</body>
<html>
мой контент файл:
<!DOCTYPE html>
<html layout:decorator="/html/layouts/layout">
<head>
<title>My content title</title>
</head>
<body>
<div layout:fragment="content">
...
</div>
</body>
</html>
и, наконец, мой / html / компоненты / голова.htm файл:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head th:fragment="head">
<meta charset="utf-8" />
<title layout:title-pattern="$CONTENT_TITLE">Layout Title should be replaced by Content Title!</title>
...
</head>
<body>
</body>
</html>
содержание в порядке. Нижний колонтитул и голова включены (заменены) из файлов, как и ожидалось, но заголовок страницы пуст!
я:
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title></title>
...
что случилось?
3 ответов
наконец, я нашел способ достичь того, чего хотел.
в файле макета <title>
tag должны остановиться. Все остальные теги я сгруппировал с <object>
tag и аннотировал его следующим образом:
<head>
<title layout:title-pattern="$CONTENT_TITLE">Layout Title will be replaced by Page Title!</title>
<object th:include="/html/components/head :: head" th:remove="tag" />
</head>
в моем html / компонентах / голове.htm-файл мне пришлось удалить <title>
- тег, поэтому она не будет дублироваться после включения.
<head th:fragment="head">
<meta charset="utf-8" />
<!-- NO TITLE TAG HERE -->
...
</head>
этот путь фрагмент головы входит на <object>
тег и спасибо th:remove="tag"
<object>
тег удаляется и мой окончательный вывод HTML:
<head>
<title>My content title</title>
<meta charset="utf-8" />
<!-- NO TITLE TAG HERE -->
...
</head>
очевидно, я не удалил тег заголовка здесь сообщение тоже, как только я получил его работу.
Я думаю, что нашел немного менее подробный способ использования th:replace
и th:fragment
вместе, например, чтобы включить common <head>
метаданные и статический ресурс входит в ваши страницы.
поставить th:remove="tag"
на определение фрагмент, так что вам не придется повторять th:remove="tag"
каждый раз, включая его.
fragment_head.HTML-код
<thymeleaf xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
th:fragment="head" th:remove="tag">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" th:href="@{/css/vendor/bootstrap.min.css}"/>
</thymeleaf>
файла mypage.HTML-код
<head>
<thymeleaf th:replace="fragment_head :: head" />
</head>
Вы можете заменить весь тег head.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="pl" th:replace="fragments/head :: head">
</head>
<body>
...
</body>
</html>
ресурсы/шаблоны/фрагменты/главы.HTML-код:
<head lang="pl">
<title>Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="http://cdn.jsdelivr.net/webjars/bootstrap/3.3.5/css/bootstrap.min.css"
th:href="@{/webjars/bootstrap/3.3.5/css/bootstrap.min.css}"
rel="stylesheet" media="screen" />
<script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.min.js"
th:src="@{/webjars/jquery/2.1.4/jquery.min.js}"></script>
<link href="../static/css/mycss.css"
th:href="@{css/mycss.css}" rel="stylesheet" media="screen"/>
</head>