Implementación de Velocity para la creación dinámica de contenido HTML
1. Dependencias del proyecto
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
2. Creación del archivo de plantilla UsuarioTemplate.vm
<html>
<head>
<title>
Datos del Usuario
</title>
</head>
<body>
Estimado/a:<br>
<br>
Le informamos que los datos del usuario $nombre han sido actualizados <br>
Nombre: $nombre <br>
Edad: $edad <br>
Email: $email <br>
<br>
Saludos Cordiales <br>
</body>
</html>
3. Implementación del procesador de plantillas
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
public class ProcesadorPlantillas {
public static String generarContenido(Map<String, Object> datos, String nombrePlantilla) {
// Configuración de propiedades de Velocity
Properties configuracion = new Properties();
configuracion.setProperty("resource.loader", "class");
configuracion.setProperty("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
configuracion.setProperty("input.encoding", "UTF-8");
configuracion.setProperty("output.encoding", "UTF-8");
configuracion.setProperty("runtime.log.logsystem.class",
"org.apache.velocity.runtime.log.NullLogChute");
// Inicialización del motor de plantillas
VelocityEngine motor = new VelocityEngine(configuracion);
motor.init();
// Carga de la plantilla
Template plantilla = motor.getTemplate(nombrePlantilla);
// Contexto para los datos dinámicos
VelocityContext contexto = new VelocityContext(datos);
// Procesamiento de la plantilla
StringWriter escritor = new StringWriter();
plantilla.merge(contexto, escritor);
return escritor.toString();
}
}
4. Ejemplo de uso
import java.util.HashMap;
import java.util.Map;
public class DemoPlantillas {
public static void main(String[] args) {
// Preparación de datos para la plantilla
Map<String, Object> datosUsuario = new HashMap<String, Object>();
datosUsuario.put("nombre", "María García");
datosUsuario.put("edad", "30");
datosUsuario.put("email", "maria.garcia@ejemplo.com");
// Ruta y nombre de la plantilla
String contenidoHTML = ProcesadorPlantillas.generarContenido(datosUsuario, "UsuarioTemplate.vm");
// Mostrar resultado
System.out.println(contenidoHTML);
}
}
Salida en consola:
Si al ejecutra el código obtienes un error similar a:
ResourceManager : unable to find resource 'UsuarioTemplate.vm' in any resource loader.
Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'UsuarioTemplate.vm'
La solución es:
- Asegurarte de que el archivo de plantilla (UsuarioTemplate.vm) está en el classptah
- En Eclipse: clic derecho sobre la carpeta que contiene el archivo → Build Path → Use as Source Folder
- En Maven: colocar el archivo en src/main/resources