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>), и это продолжает работает нормально при открытии в браузерах в качестве прототипов!
Автор: pilot911