El uso de Thymeleaf for each es algo de lo más habitual cuando trabajamos con el motor de plantillas . Thymeleaf se encarga de renderizar páginas html con la información que obtenemos del servidor y permitir una integración natural entre los datos del modelo MVC y las páginas que soportan HTML5.
Vamos a ver unos ejemplos sencillos que usen este motor de plantillas. Para ello nos vamos a apoyar en un controlador que se encargue de pasar información a las plantillas.
@Controller public class ProductoController { @RequestMapping("/hola") public String hola(Model modelo) { modelo.addAttribute("mensaje","hola desde spring mvc"); return "hola"; } }
Este es el primer caso en el cual tenemos una url de /hola y a esta url mapeamos un método que nos redirija a una plantilla adjuntando un mensaje con un contenido:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> </head> <body> <p th:text="${mensaje}"></p> </body> </html>
El resultado es que la variable ${mensaje} será substituida por la información que esta asociada ella en el servidor:
ThymeLeaf y Objetos
De la misma forma que podemos imprimir el valor de una variable no tenemos problema para gestionar también el uso de objetos e imprimir en una pagina HTML su contenido:
@RequestMapping("/objeto") public String objeto(Model modelo) { modelo.addAttribute("objeto",new Producto(1,"ordenador",200)); return "objeto"; }
En este caso lo que añadimos es un objeto completo . Es momento de ver como imprimir esa información a nivel de HTML:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> </head> <body> <p th:text="${objeto.numero}"></p> <p th:text="${objeto.concepto}"></p> <p th:text="${objeto.importe}"></p> </body> </html>
ThymeLeaf For Each y listas de Objetos
Ya solo nos queda ver cómo gestionar una lista de objetos e imprimirla en una tabla . En este caso la operativa es un poco más compleja.
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> </head> <body> <ul th:each="producto : ${lista}" > <li th:text="${producto.numero}"></li> <li th:text="${producto.concepto}"></li> <li th:text="${producto.importe}"></li> </ul> </body> </html>
Como podemos observar tenemos que usar un Thymeleaf for each que se coloca en la etiqueta padre y permite recorrer una lista y acceder al valor de cada objeto y sus propiedades . El resultado lo podemos ver aquí :
El motor de plantillas de Thymeleaf permite una integración sencilla de y natural de un Modelo MVC a través del uso de atributos data.