Cómo NO hacer iteraciones anidadas en thymeleaf 3

Escenario

Me han pedido que integre en una nueva aplicación una funcionalidad de otra ya existente. No es la primera vez que me ha tocado hacerlo. Suele ser un trabajo tedioso basado en continuos copia y pega y frecuentes refactorizaciones. Una de la vistas que debo importar en la nueva aplicación muestra una tabla con filas desplegables. Para ello utilizaba, con Thymeleaf, un bucle anidado en la vieja aplicación y bootstrap collapse para mostrar y esconder las filas.

Problema

El mismo código en la nueva aplicación no funciona. No se muestran los datos del bucle anidado. Depuro el valor de las variables, en el controlador y la vista, pero sigo sin entender por qué no se muestran los datos del segundo bucle. Sospecho que pueda ser debido a un cambio en la versión de Thymeleaf. En la aplicación antigua está instalada una versión 2.x y en la nueva una 3.x. Pero en la documentación oficial no encuentro nada que explique el cambio de comportamiento del bucle anidado.

Solución

Tampoco encuentro la solución en Stackoverflow, pero sí un post que me encamina hacia ella. Un usuario comparte una muestra de su código en la que utiliza el elemento th:block para delimitar parte de la lógica en su plantilla. Falto de ideas decides probar a cambiar el bloque contenedor del segundo bloque, de un tr a un th:block: Ya funciona. Por lo visto, en la nueva versión de Thymeleaf para anidar un th:each ha de estar incluido en un elemento th:block.

Publicaciones Similares

  • Despliegue aplicación Spring Boot

    Escenario Queremos desplegar en la nube una aplicación desarrollada con Spring Boot cuyo código está bajo control de versiones. Para este artículo usaremos ubuntu 16.04 y java 8, pero el procedimiento debería ser el mismo con versiones más actuales. Problema Ninguno. Realmente es sencillo desplegar una aplicación de este tipo si se dispone de las…

  • |

    Traducción de variables en javascript

    Escenario Estoy trabajando en una aplicación multi-lenguaje desarrollada con la plataforma spring boot. Para quien no conozca esta plataforma de desarrollo, spring boot te permite gestionar varios lenguajes gracias a un sistema que utiliza ficheros de tipo propiedades para almacenar las traducciones. Los nombres de estos ficheros han de respetar la siguiente convención, messages_{código ISO…

  • Spring boot y websockets

    Escenario Un usuario se conecta con el móvil a su aplicación de empresa. Si es la primera vez que lo hace ésta le pide autorización para recabar su localización. La aplicación manda la localización al servidor y desde el servidor se informa a una página de monitorización. Dicha página está conectada por websocket con el…

  • Autenticación múltiple en Spring boot: JWT y formulario

    Escenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:

    …

  • Renovación de la llave gpg

    Escenario En mi trabajo usamos gpg para cifrar los documentos con información sensible. Problema Resulta que, en su día, di de alta la clave con una esperanza de vida de dos años. Y dos años pasan muy rápido. Solución Estos son los comandos que hay que ejecutar para extender la fecha de caducidad. Para listar…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *