Префикс 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. - если это статические элементы, которые не требуют обработки - то вы не указываете данный префикс.