th:text
Descripción: th:text
es un atributo de Thymeleaf que se utiliza para mostrar datos dinámicos de forma segura, es decir, escapando automáticamente caracteres peligrosos para evitar ataques XSS (cross-site scripting).
Cuando utilizas th:text
, los datos se renderizan como texto, y cualquier contenido HTML dentro de los datos será escapado.
<p th:text="${mensaje}">Texto por defecto</p> <!-- Esto mostrará el valor del atributo "mensaje" -->
Por ejemplo, si el valor de mensaje
es "Hola, Mundo"
, el navegador lo renderizará como Hola, <strong>Mundo</strong>
, mostrando el texto sin formato.
th:utext
Descripción: th:utext
es similar a th:text
, pero permite que el contenido HTML dentro de los datos dinámicos se renderice sin ser escapado. Se debe usar con precaución, ya que puede introducir vulnerabilidades de seguridad si los datos no son confiables.
<p th:utext="${mensajeHTML}">Texto por defecto</p> <!-- Esto mostrará el contenido HTML dentro de "mensajeHTML" -->
Si el valor de mensajeHTML
es "Hola, Mundo"
, el navegador lo renderizará correctamente como HTML, mostrando "Hola, Mundo" en negrita.
⚠️ Precaución
Utiliza <code>th:utext</code> únicamente cuando estás seguro de que los datos HTML que estás mostrando son confiables y no provienen de usuarios externos. De lo contrario, puedes exponer tu aplicación a ataques XSS.
Aquí tienes un ejemplo completo de cómo se utilizan th:text
y th:utext
:
@Controller
public class MiControlador {
@GetMapping("/ejemplo")
public String ejemplo(Model model) {
model.addAttribute("mensaje", "Hola, <strong>Mundo</strong>");
model.addAttribute("mensajeHTML", "Hola, <strong>Mundo</strong>");
return "ejemplo"; // Nombre de la vista Thymeleaf
}
}
En la vista Thymeleaf, se renderizarían los datos dinámicos así:
<p th:text="${mensaje}"></p> <!-- Mostrará "Hola, <strong>Mundo</strong>" -->
<p th:utext="${mensajeHTML}"></p> <!-- Mostrará "Hola, <strong>Mundo</strong>" en HTML -->