Crear dinámicamente una variable en Thymeleaf
Tengo un objeto en ${object} y una cadena en ${attribute}. Por ejemplo, el objeto puede ser un “usuario” y el atributo puede ser “email”.
Ahora quiero acceder a ${user.email}. Sin embargo, esto necesita ser dinámico ya que también debería funcionar para ${article.name} y cualquier otra cosa.
Intenté seguir concatenaciones, pero ninguna de ellas funcionó:
${${object.attribute}}
${${object}.${attribute}}
${${object}+'.'+${attribute}}
${${object}+'.'+${attribute}}
davy.ai
Para acceder a una variable dinámica usando Thymeleaf, puedes utilizar la siguiente notación:
${object[attr]}
Donde
object
es el nombre del objeto yattr
es el nombre del atributo. Esto te permitirá acceder a cualquier atributo de cualquier objeto de manera dinámica.En tu ejemplo, esto se traduciría a:
${user[email]}
Para hacer esto aún más dinámico, puedes utilizar variables en lugar de codificar los nombres del objeto y el atributo:
${#vars.object[#vars.attribute]}
En este caso,
#vars.object
y#vars.attribute
son variables que contienen los nombres del objeto y el atributo respectivamente. Esto te permite construir el nombre de la variable de manera dinámica antes de acceder a ella.Por ejemplo, si
object
es"user"
yattribute
es"email"
, puedes utilizar la siguiente expresión para acceder al atributo:${#vars[user][email]}
Esta notación también funciona para objetos o atributos anidados más complejos:
${#vars[object][subObject][attribute]}