🚀 5.2 O Arsenal de Atributos do Thymeleaf

Para dar vida aos nossos templates na Engenharia Premium, utilizamos um conjunto de atributos especializados que o Thymeleaf processa no servidor. Abaixo, os principais comandos que transformarão seu HTML estático em uma aplicação de elite.

📥 Saída de Dados e Internacionalização

  • th:text: Substitui o conteúdo da tag pelo valor da expressão.
    • Ex: <span th:text="${cliente.nome}">Nome Fake</span>
  • th:utext: (Unescaped Text) Exibe HTML puro. Use com cautela por motivos de segurança (XSS)!
  • th:text="#{welcome.message}": Busca uma chave nos arquivos de tradução (messages.properties), permitindo um sistema global (i18n).

Na nuvem, as URLs podem mudar. O Thymeleaf resolve isso com o prefixo @.

  • th:href: Gerencia links para CSS, JS ou outras páginas.
    • Ex: <link th:href="@{/css/main.css}" rel="stylesheet">
  • th:src: Gerencia caminhos para imagens e scripts externos.
    • Ex: <img th:src="@{/img/logo.png}">
  • th:action: Define o destino de um formulário de forma segura.

📂 Controle de Fluxo e Iteração

  • th:each: O “For-Each” das telas. Itera sobre listas de objetos.
    • Ex: <li th:each="item : ${itens}" th:text="${item.nome}">Item</li>
  • th:if / th:unless: Renderização condicional. O th:unless é o inverso do if.
    • Ex: <div th:if="${clientes.empty}">Nenhum cliente cadastrado</div>

📝 Gestão de Formulários (Spring Integration)

  • th:object: Define o objeto que o formulário está editando.
  • th:field: Vincula um atributo do objeto a um input, gerenciando automaticamente o id, name e value.
    • Ex: <input type="text" th:field="*{nome}"> (Note o uso do * para seleção relativa ao objeto).

🎨 Dinamismo Visual

  • th:class / th:classappend: Aplica classes CSS condicionalmente (ideal para validações de erro).
    • Ex: <div class="base" th:classappend="${#fields.hasErrors('nome')} ? 'is-invalid'"></div>

IMPORTANT

Lembre-se: o segredo do Template Natural é sempre colocar um conteúdo “mock” dentro da tag. O navegador exibirá esse conteúdo no design, mas o Spring Boot o substituirá pelo valor real na execução.

No próximo capítulo, aprenderemos a poderosa linguagem de expressões que alimenta esses atributos.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️