Оглавление

11 Комментарии и Блоки / Blocks


11.1. Стандартные HTML/XML комментарии


Стандартные HTML/XML комментарии <!--… --> можно использовать в любом месте шаблонов Thymeleaf. Все, что внутри этих комментариев, не будет обрабатываться Thymeleaf и будет скопировано дословно:

<!-- User info follows -->
<div th:text="${...}">
  ...
</div>

11.2. Thymeleaf блоки комментариев на уровне парсера


Parser-level комментарии — это участки кода, которые просто удаляются из шаблона при парсинге. Посмотрим на них:

<!--/* This code will be removed at Thymeleaf parsing time! */-->

Thymeleaf удалит все между <!--/* and */-->, поэтому эти блоки комментариев также могут использоваться для отображения кода, когда шаблон статически открыт, зная, что он будет удален, когда Thymeleaf обработает его:

<!--/*--> 
  <div>
     you can see me only before Thymeleaf processes me!
  </div>
<!--*/-->

Это может пригодиться для прототипирования таблиц с большим количеством <tr>, например:

<table>
   <tr th:each="x : ${xs}">
     ...
   </tr>
   <!--/*-->
   <tr>
     ...
   </tr>
   <tr>
     ...
   </tr>
   <!--*/-->
</table>

11.3. Комментарии Thymeleaf уровня прототипирования


Thymeleaf позволяет определить специальные блоки комментариев, которые удобны при отображении прототипа дизайна, но при этом они считаются нормальной разметкой при обработке шаблона со стороны Thymeleaf.

<span>hello!</span>
<!--/*/
  <div th:text="${...}">
    ...
  </div>
/*/-->
<span>goodbye!</span>

Thymeleaf’s парсер просто удалит <!--/*/ и /*/--> маркеры, но не их содержимое, которое будет оставлено без комментария. При обработке шаблона на выходе увидим:

<span>hello!</span>
<div th:text="${...}">
  ...
</div>
 <span>goodbye!</span>

Как и в блоках комментариев на уровне парсера, эта функция не зависит от диалекта.

11.4. Синтетический th:block тег


Thymeleaf’s элементный процессор (а не атрибутный) и включенный в Standard Dialects — это th:block.

th:block — это простой контейнер атрибутов, который позволяет разработчикам шаблонов указывать какие атрибуты они хотят. Thymeleaf выполнит эти атрибуты, а затем просто удалит блок, но не его содержимое.

Таким образом, это может быть полезно, например, при создании повторяющихся таблиц, для которых требуется более одного <tr> для каждого элемента:

<table>
  <th:block th:each="user : ${users}">
    <tr>
        <td th:text="${user.login}">...</td>
        <td th:text="${user.name}">...</td>
    </tr>
    <tr>
        <td colspan="2" th:text="${user.address}">...</td>
    </tr>
  </th:block>
</table>

И особенно полезно при использовании в сочетании с блоками комментариев только для прототипа:

<table>
    <!--/*/ <th:block th:each="user : ${users}"> /*/-->
    <tr>
        <td th:text="${user.login}">...</td>
        <td th:text="${user.name}">...</td>
    </tr>
    <tr>
        <td colspan="2" th:text="${user.address}">...</td>
    </tr>
    <!--/*/ </th:block> /*/-->
</table>

Обратите внимание, как это решение позволяет шаблонам быть валидным HTML (не нужно добавлять запрещенные блоки <div> внутри <table>), и это продолжает работает нормально при открытии в браузерах в качестве прототипов!

Комментарии (0)