Могу ли я установить атрибут data- * с помощью тимелеафа?
Как я понял из документации тимелеафа, я пробовал:
<div th:data-el_id="${element.getId()}"> <!-- doesn't work -->
<div data-th-el_id="${element.getId()}"> <!-- doesn't work -->
Могу ли я установить атрибут data- * с помощью тимелеафа?
Как я понял из документации тимелеафа, я пробовал:
<div th:data-el_id="${element.getId()}"> <!-- doesn't work -->
<div data-th-el_id="${element.getId()}"> <!-- doesn't work -->
Ответы:
Да, th:attr
на помощь документация Thymeleaf - Установка значений атрибутов .
Для вашего сценария это должно сработать:
<div th:attr="data-el_id=${element.getId()}">
Правила XML не позволяют устанавливать атрибут дважды в теге, поэтому th:attr
в одном элементе не может быть более одного атрибута .
Примечание. Если вам нужно несколько атрибутов, разделите их запятыми:
<div th:attr="data-id=${element.getId()},data-name=${element.getName()}">
th:attr="data-id=${element.getId()},data-name=${element.getName()}"
th:attr="data-id='some-text'+${element.getId()}+'some-other-text',data-name=${element.getName()}"
Или вы можете использовать этот диалект Thymeleaf https://github.com/mxab/thymeleaf-extras-data-attribute, и вы сможете сделать
<div data:el_id="${element.getId()}">
В Thymeleaf 3.0 есть обработчик атрибутов по умолчанию, который можно использовать для любых настраиваемых атрибутов, например, th:data-el_id=""
становится data-el_id=""
, th:ng-app=""
становится ng-app=""
и так далее. Больше нет необходимости в любимом диалекте атрибутов данных.
Я предпочитаю это решение, если хочу использовать в качестве значения json вместо:
th:attr="data-foobar='{"foo":'+${bar}+'}'"
Вы можете использовать (в сочетании с буквальной заменой ):
th:data-foobar='|{"foo":${bar}}|'
Обновление: если вам не нравится th
пространство имен, вы также можете использовать дружественный атрибут HTML5 и имена элементов, например data-th-data-foobar=""
.
Если кому-то интересно, соответствующие тесты механизма шаблонов можно найти здесь: Тесты для процессора атрибутов по умолчанию
th:data-el_id
будет работать.