Generación de HTML con el Motor de Plantillas VelocityEngine

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:

  1. Asegurarte de que el archivo de plantilla (UsuarioTemplate.vm) está en el classptah
  2. En Eclipse: clic derecho sobre la carpeta que contiene el archivo → Build Path → Use as Source Folder
  3. En Maven: colocar el archivo en src/main/resources

Etiquetas: Velocity java HTML plantillas Motor de plantillas

Publicado el 6-9 19:35