FreeMarker - Exemple

Le principe

Je vous propose donc de réaliser un export CSV d'une structure de donnée avec FreeMarker.
L'ensemble des sources du code suivant est disponible ici.

La structure de données

La première chose à réaliser est la structure de donnée. Pour ce faire, nous allons créer une classe personne définit par les propriétés suivantes (son nom, son prénom et son age)


	

public class Personn { private String firstname; private String lastname; private int age; public Personn(String firstname, String lastname, int age) { this.firstname = firstname; this.lastname = lastname; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } }

Le template

Ensuite nous définissons un fichier template FreeMarker listToCSV.ftl. Ce modèle doit permettre d'afficher tous les attributs de chaques personnes de la liste suivi du caractère ';'


	

<#list datas as x> ${x.firstname};${x.lastname};${x.age}; </#list>

Le code de génération

Il ne reste plus qu'à écrire le code permettant cette génération en java.


	

import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; public class Main { public static void main(String[] args) throws IOException, TemplateException { /* Create and adjust the configuration */ Configuration cfg = new Configuration(); System.out.println(new File("src/tpl").getAbsolutePath()); cfg.setDirectoryForTemplateLoading(new File("src/tpl")); cfg.setObjectWrapper(new DefaultObjectWrapper()); /* Get or create a template */ Template temp = cfg.getTemplate("listToCSV.ftl"); /* Create a data model */ Map root = new HashMap(); List datas = new LinkedList(); root.put("datas", datas); datas.add(new Personn("René", "Girault", 37)); datas.add(new Personn("Nicole", "Loin", 10)); datas.add(new Personn("JB", "Dece", 19)); /* Merge data model with template */ Writer out = new OutputStreamWriter(System.out); temp.process(root, out); out.flush(); } }

Le résultat

Voici enfin ce que produit l'exécution de ce code.


	

René;Girault;37; Nicole;Loin;10; JB;Dece;19;