some image

Tag FreeMarker

Usando FreeMarker como generador de Plantillas

Etiquetas: , Blog, Programación No comments

Estos días tuve la necesidad de realizar el envio de emails utilizando plantillas, el dilema es que fue necesario utilizar una estrategía para facilitar el trabajo. Las opciones eran FreeMarker y Velocity. Después de consultar Pros y Contras de ambas librerias, decidí optar por FreeMarker, ya que el proyecto sigue arriba mientras que Velocity “has gone” :( . Bien entonces ahora sí vamos al grano.

1. ¿Qué es FreeMarker?

FreeMarker es en pocas palabras un “Motor de Plantillas”  escrito en lenguaje Java, el cuál nos permite a partir de una Plantilla (Template) y una serie de Parametros (Parameters), obtener el contenido de una plantilla procesada. Esta libreria puede ser descargada de la página oficial o en caso de querer utilizarlo con un gestor de administración de proyectos como Maven, la dependencia es :

    

  org.freemarker
  freemarker
  2.3.20

 

2. Ejemplo

Bien, a continuación coloco un código de ejemplo

package org.codesandtags;

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.IOException;
import java.io.StringReader;
import java.util.Locale;

/**
 * Clase de ejemplo utilizando FreeMarker para obtener
 * un Template procesado a partir de una cadena de texto
 *
 * Created by codesandtags on 27/05/2015.
 */
public class FreeMarkerExample {

    private Configuration configuration;
    private Template template;

    public FreeMarkerExample(){
        configuration = new Configuration();
        configuration.setDefaultEncoding("UTF-8");
        configuration.setLocale(Locale.US);
    }

    public Configuration getConfiguration() {
        return configuration;
    }

    public Template getTemplate() {
        return template;
    }

    public void setTemplate(Template template) {
        this.template = template;
    }

    public void setContentTemplate(String name, String content){
        try {
            template = new Template(name, new StringReader(content), getConfiguration());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Clase de Prueba

package org.codesandtags;

import freemarker.template.TemplateException;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by codesandtags on 27/05/2015.
 */
public class FreeMarkerExampleTest {

    @Test
    public void generateTemplateTest(){
        FreeMarkerExample example = new FreeMarkerExample();
        StringBuilder content = new StringBuilder("Hello ${user},")
                .append("\nthis is an example using FreeMarker. ")
                .append("\nThe list of names are :  ")
                .append("\n<#list names as name>  ")
                .append("\n  ${name_index + 1}. ${name} ")
                .append("\n  ");

        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("user", "Codes and Tags");
        parameters.put("names", new ArrayList(Arrays.asList("Cocoman", "Juan", "Edwin")));

        try {
            example.setContentTemplate("exampleTemplate", content.toString());
            Writer out = new StringWriter();
            example.getTemplate().process(parameters, out);
            Assert.assertNotNull(out);
            System.out.println(out.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        }
    }

}

Salida generada una vez se ha procesado la plantilla con sus parámetros

Hello Codes and Tags,
this is an example using FreeMarker. 
The list of names are :  
  1. Cocoman 
  2. Juan 
  3. Edwin 

 

3. Descargar Ejemplo desde GitHub

https://github.com/codesandtags/freemarker-example

Git Logo

GitHub Codes and Tags

4. Referencias

http://freemarker.org/
http://www.vogella.com/tutorials/FreeMarker/article.html
http://www.javabeat.net/freemarker-template-hello-world-example/
http://viralpatel.net/blogs/freemaker-template-hello-world-tutorial/