Guía técnica para la integración y uso de Thymeleaf en Spring Boot

Incorporación de dependencias

Para comenzar a utilizar Thymeleaf en un proyecto basado en Maven, es necesario incluir el "starter" correspondiente dentro del archivo pom.xml. Una ventaja de este artefacto es que ya incluye las dependencias necesarias de Spring Web, por lo que no es estrictamente necesario declarar spring-boot-starter-web de forma independiente.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Configuración del motor de plantillas

Por defecto, Spring Boot busca las plantillas en la ruta src/main/resources/templates/ y los recursos estáticos en src/main/resources/static/. No obstante, es posible personalizar el comportamiento del motor mediante el archivo application.properties para ajustar aspectos como la codificación o el manejo de caché:

# Configuración esencial de Thymeleaf
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
# Desactivar caché para ver cambios en tiempo real durante el desarrollo
spring.thymeleaf.cache=false

Sintaxis fundamental y Namespace

Para que el procesador reconozca los atributos de Thymeleaf, se debe declarar el espacio de nombres en la etiqueta inicial del documento HTML:

<html xmlns:th="http://www.thymeleaf.org">

Gestión de variables

El acceso a datos provenientes del modelo se realiza mediante la expresión ${...}. El motor reemplaza el contenido estático por el valor dinámico en tiempo de ejecución, facilitando la visualización del diseño sin necesidad de un servidor activo.

<p th:text="'Bienvenido, ' + ${usuario.nombre} + '!'">Nombre por defecto</p>

Manejo de rutas y URLs

Para gestionar enlaces y rutas de recursos, se emplea la sintaxis @{...}, que procesa automáticamente el contexto de la aplicación:

<!-- Ruta absoluta -->
<a th:href="@{https://google.com}">Ir a buscador</a>
<!-- Ruta relativa al contexto -->
<a th:href="@{/dashboard}">Panel de control</a>
<!-- Enlace a recursos estáticos -->
<link th:href="@{/css/main.css}" rel="stylesheet" />

Inteprolación de cadenas de texto

Además de la concatenación tradicional, Thymeleaf permite el uso de literales de sustitución mediante barras verticales |...|, lo que simplifica la lectura del código:

<span th:text="|Hola ${cliente.apellido}, es un gusto verte.|"></span>

Lógica condicional y operadores

Thymeleaf soporta operaciones aritméticas y comparaciones lógicas directamente en los atributos:

<div th:if="${puntos > 100}">
    <p>Eres un usuario Premium</p>
</div>

<div th:unless="${puntos <= 100}">
    <p>Felicidades por tu puntuación</p>
</div>

Para estructuras de selección múltiple, se utiliza th:switch y th:case:

<div th:switch="${empleado.rol}">
  <p th:case="'ADMIN'">Acceso total al sistema</p>
  <p th:case="'EDITOR'">Acceso restringido a contenido</p>
  <p th:case="*">Perfil de visualización básico</p>
</div>

Iteración de colecciones

La renderización de listas se gestiona con el atributo th:each, permitiendo recorrer objetos iterables para generar elementos repetitivos como filas de una tabla:

<table>
  <thead>
    <tr>
      <th>Título</th>
      <th>Precio</th>
    </tr>
  </thead>
  <tbody>
    <tr th:each="libro : ${catalogo}">
      <td th:text="${libro.titulo}">Título Genérico</td>
      <td th:text="${libro.precio}">0.00</td>
    </tr>
  </tbody>
</table>

Objetos de utilidad (Expression Utilities)

Existen objetos integrados prefijados con # que facilitan tareas comunes sobre cadenas, fechas o números:

<!-- Formateo de fechas -->
<span th:text="${#dates.format(fechaCreacion, 'dd/MM/yyyy')}"></span>

<!-- Verificación de cadenas -->
<div th:if="${#strings.isEmpty(usuario.email)}">
    <p>El correo es obligatorio.</p>
</div>

Actualización a Thymeleaf 3

Si se utiliza una versión antigua de Spring Boot y se desea aprovechar las mejoras de rendimiento y la flexibilidad de sintaxis de la versión 3 (como no requerir que todas las etiquetas estén estrictamente cerradas), se pueden sobrescribir las propiedades de versión en el pom.xml:

<properties>
    <thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.4.1</thymeleaf-layout-dialect.version>
</properties>

Etiquetas: Thymeleaf Spring Boot java HTML5 MVC

Publicado el 6-8 23:23