Префикс th, когда используется?

не совсем понимаю когда нужно ставить префикс th, например если сделать так:<form th:method="post" th:action="/main"> вместо <form method="post" action="/main"> - изменений не будет, стоп, или будет?


Ответы (1 шт):

Автор решения: Михаил Ребров

Что обозначает префикс th?

th обозначает пространство имён Thymeleaf в документе, содержащее доступные для управления элементами атрибуты.

Оно объявляется в начале документа

<html xmlns:th="http://www.thymeleaf.org" xml:lang="ru-ru" lang="ru-ru">

Что такое пространство имен?

Пространство имён в XML (англ. XML namespace) — это стандарт, описывающий именованную группу имён элементов и атрибутов, служащую для обеспечения их уникальности в XML-документе. (с)Wikipedia

Это значит что на http://www.thymeleaf.org имеется стандарт, который описывает, какие именно атрибуты и элементы могут входить в данное пространство имен и, возможно, какие они могут принимать значения. В последствии можно будет валидировать XML документ с помощью данного стандарта.

Что такое Thymeleaf?

Thymeleaf - это шаблонизатор, который Spring предлагает использовать по умолчанию. (По факту Вы можете использовать и другие шаблонизаторы. Никто этого не запрещает.)

Данный инструмент, как уже стало понятно использует XML в качестве шаблона.
Он находит все элементы, имеющие атрибуты объявленные в данном пространстве имен(th), и обрабатывает их в соответствии со своими инструкциями.

Например:

  • Если в элементе указан атрибут th:text="${object.property}", то шаблонизатор вставляет в указанный элемент текстовый блок, соответствующий значению свойства указанного объекта.
  • Если в документе указан атрибут th:href="${post.link}", то шаблонизатор вставляет атрибут href со значением, взяты из свойства link объекта post.
  • Аналогичным образом работают атрибуты th:value,th:class и другие...они просто заменяют атрибут c NS th, на аналогичный атрибут HTML, только с предварительным вычислением выражения, которое было указано внутри данного атрибута.
  • Также имеются возможности выполнять условия (выводить эделемент при соответствии условию) с помощью атрибута th:if
  • Выполнять итерацию с помощью атрибутов th:each,th:for
  • Выполнять вставку и замену других шаблонов с помощью атрибутов th:include, th:replace и объявлять фрагменты для многоразового использования с помощью атрибута th:fragment
  • и многое другое

Подробно о всех возможностях шаблонизатора можно узнать на страницах документации: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html

Чтобы подытожить все сказанное:

  • Все атрибуты в пространстве имен th заранее определены
  • Относительно каждого атрибута в пространстве имен th шаблонизатор имеет четкие инструкции по его обработке
  • Все атрибуты в данном пространстве имен будут обработаны шаблонизатором
  • Все оставшиеся атрибуты будут проигнорированы, что обозначает то, что не имеет смысла использовать конструкции ${someObject.someProperty} вне атрибутов, объявленных в данном пространстве имен.

Другими словами:

  • если вы хотите, чтобы выражение было обработано шаблонизатором - то вы используете пространство имен th.
  • если это статические элементы, которые не требуют обработки - то вы не указываете данный префикс.
→ Ссылка