Aujourd'hui, j'ai eu l'opportunité d'utiliser Apache Free Marker. À ce moment-là, je n'ai pas pu trouver un échantillon japonais qui produit une boucle à plusieurs reprises dans Map, donc j'écrirai un échantillon avec un mémo.
Apache FreeMarker:2.3.28
Cette fois, le HTML est généré à l'aide de FreeMarker. Le résultat de sortie est comme indiqué dans la figure ci-dessous.
La balise Table et la valeur en bas de la table sont générées par FreeMarker.
pom.xml
<dependencies>
<!-- FreeMarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
</dependencies>
template Enregistrez le modèle dans [src / main / resource / template.html]. Il s'agit d'un paramètre pour afficher la balise tr de la balise Table et la balise
<html>
<span>[table from list]</span>
<table style="border-collapse: collapse;" cellspacing="1" cellpadding="5">
<tbody>
<tr align="center">
<td style="background-color:#edf5f9;border:1px solid #42B4ED;font-weight: bold;" width="25%">parameter</td>
<td style="background-color:#edf5f9;border:1px solid #42B4ED;font-weight: bold;" width="18%">value</td>
<td style="background-color:#edf5f9;border:1px solid #42B4ED;font-weight: bold;" width="57%">comment</td>
</tr>
<!-- Output rows from java.util.List -->
<#list itemList as item>
<tr>
<td style="border: 1px solid #42B4ED;">${item.param}</td>
<td style="border: 1px solid #42B4ED;">${item.value}</td>
<td style="border: 1px solid #42B4ED;">${item.comment}</td>
</tr>
</#list>
</tbody>
</table>
<!-- Output a row from java.util.Map -->
</br>
<div>[value from map]</div>
<#list mapValue as key, value>
<div>
<span>${key}:${value}</span>
</div>
</#list>
</html>
Java
Le code source sera décrit pour chaque partie (un bloc de traitement).
Parameter for Template
Le codage des paramètres (valeurs variables) transmis à FreeMarker est le suivant.
//====== Build template parameter ======//
Map<String, Object> paramMap = new HashMap<>();
// build itemList
List<Map<String, String>> itemList = new ArrayList<>();
Map<String, String> itemMap1 = new HashMap<>();
itemMap1.put("param", "param1");
itemMap1.put("value", "99.1");
itemMap1.put("comment", "hogehoge");
itemList.add(itemMap1);
Map<String, String> itemMap2 = new HashMap<>();
itemMap2.put("param", "param2");
itemMap2.put("value", "98.2");
itemMap2.put("comment", "hogehoge2");
itemList.add(itemMap2);
paramMap.put("itemList", itemList);
// build mapValue
Map<String, String> mapValue = new HashMap<>();
mapValue.put("param3", "97.3");
mapValue.put("param4", "96.4");
paramMap.put("mapValue", mapValue);
Puisqu'il est difficile de comprendre le contenu de Map si c'est la source, j'ajouterai également le résultat de toString de [paramMap].
paramMap
{
itemList=[
{param=param1, value=99.1, comment=hogehoge},
{param=param2, value=98.2, comment=hogehoge2}
],
mapValue={
param3=97.3,
param4=96.4
}
}
Output
L'initialisation du modèle FreeMarker et le traitement de la sortie sont les suivants. Le résultat de la sortie est envoyé vers la sortie standard et le fichier (result.html).
//====== Initialize template ======//
// New Config
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
// Encoding
cfg.setDefaultEncoding("UTF-8");
// Set template path
cfg.setClassLoaderForTemplateLoading(Thread.currentThread().getContextClassLoader(), "/");
//====== Output ======//
try {
// Get template
Template template = cfg.getTemplate("template.html");
// Write to system out
Writer out = new OutputStreamWriter(System.out);
template.process(paramMap, out);
out.flush();
// Write to file
try (Writer fw = new FileWriter(new File("result.html"))) {
template.process(paramMap, fw);
out.flush();
}
} catch(IOException | TemplateException ex) {
ex.printStackTrace();
System.exit(1);
}
Git
Voir GitHub pour le code source complet
Recommended Posts