Heutzutage hatte ich die Möglichkeit, Apache Free Marker zu verwenden. Zu diesem Zeitpunkt konnte ich kein japanisches Sample finden, das wiederholt eine Schleife in Map ausgibt, daher werde ich ein Sample mit einem Memo schreiben.
Apache FreeMarker:2.3.28
Dieses Mal wird HTML mit FreeMarker ausgegeben. Das Ausgabeergebnis ist in der folgenden Abbildung dargestellt.
Das Table-Tag und der Wert am Ende der Tabelle werden von FreeMarker ausgegeben.
pom.xml
<dependencies>
<!-- FreeMarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
</dependencies>
template Speichern Sie die Vorlage in [src / main / resource / template.html]. Mit dieser Einstellung können Sie das tr-Tag des Table-Tags und das
<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
Der Quellcode wird für jedes Teil beschrieben (ein Verarbeitungsblock).
Parameter for Template
Die Codierung der an FreeMarker übergebenen Parameter (Variablenwerte) lautet wie folgt.
//====== 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);
Da es schwierig ist, den Inhalt von Map zu verstehen, wenn es sich um die Quelle handelt, werde ich auch das Ergebnis von toString von [paramMap] hinzufügen.
paramMap
{
itemList=[
{param=param1, value=99.1, comment=hogehoge},
{param=param2, value=98.2, comment=hogehoge2}
],
mapValue={
param3=97.3,
param4=96.4
}
}
Output
Die Initialisierung und Ausgabeverarbeitung der FreeMarker-Vorlage erfolgt wie folgt. Das Ausgabeergebnis wird in die Standardausgabe und -datei (result.html) ausgegeben.
//====== 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
Den vollständigen Quellcode finden Sie unter GitHub
Recommended Posts