Solo una nota para futuros lectores, no puede tener más de un th: attr en el mismo elemento, así que solo use uno y separe los diferentes atributos por coma:th:attr="data-id=${element.getId()},data-name=${element.getName()}"
AntonioOtero
55
Si necesita incluir una variable como parte de una cadena, debe hacer esto:th:attr="data-id='some-text'+${element.getId()}+'some-other-text',data-name=${element.getName()}"
kabadisha
1
El comentario de @AntonioOtero debería ser parte de la respuesta.
Don Cheadle
Deseo que el procesamiento de atributos no se limite a ciertos atributos, sino que se maneje en general. ¿Alguien ha escuchado que será característica? (Bueno, la culpa es mía, todavía no revisé la versión 3 ;-)
Con Thymeleaf 3.0 existe el Procesador de atributos por defecto que se puede usar para cualquier tipo de atributos personalizados, por ejemplo , se th:data-el_id=""convierte data-el_id="", th:ng-app=""se convierte , ng-app=""etc. Ya no es necesario el querido dialecto de atributo de datos.
Esta solución la prefiero, si quiero usar json como valor, en lugar de:
th:data-el_id
funcionará.Respuestas:
Sí,
th:attr
para rescatar la documentación de Thymeleaf: establecer valores de atributos .Para su escenario, esto debería hacer el trabajo:
Las reglas XML no le permiten establecer un atributo dos veces en una etiqueta, por lo que no puede tener más de uno
th:attr
en el mismo elemento.Nota: Si desea más de un atributo, separe los diferentes atributos por coma:
fuente
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()}"
O puede usar este dialecto de Thymeleaf https://github.com/mxab/thymeleaf-extras-data-attribute y podrá hacerlo
fuente
Con Thymeleaf 3.0 existe el Procesador de atributos por defecto que se puede usar para cualquier tipo de atributos personalizados, por ejemplo , se
th:data-el_id=""
conviertedata-el_id=""
,th:ng-app=""
se convierte ,ng-app=""
etc. Ya no es necesario el querido dialecto de atributo de datos.Esta solución la prefiero, si quiero usar json como valor, en lugar de:
Puede usar (en combinación con la sustitución literal ):
Actualización: si no le gusta el
th
espacio de nombres, también puede usar atributos amigables HTML5 y nombres de elementos comodata-th-data-foobar=""
.Si alguien está interesado, las pruebas de motor de plantilla relacionadas se pueden encontrar aquí: Pruebas para el procesador de atributos predeterminado
fuente