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">&copy; 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>