[JAVA] Wiederholte Probe mit Apache Freemarker

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.

Annahme

Apache FreeMarker:2.3.28

Ausgabeergebnis

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. result.png

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

-Tag unter dem Table-Tag ausgeben, indem Sie List oder Map wiederholen.

<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

Wiederholte Probe mit Apache Freemarker
Apache FreeMarker Memorandum
Apache Beam Beispielcode
Starten Sie Apache Solr mit Embedded.
Greifen Sie mit Micronaut auf Apache Kafka zu
Bearbeiten Sie Excel mit Apache POI
Leistungsschaltermuster mit Apache-Kamel
Laden Sie große Dateien mit Apache JMeter herunter
Beispiel für eine EXCEL-Dateiaktualisierung mit JAVA
Starten Sie Apache mit dem PHP-Apache-Image des Dockers neu
FileUpload mit Rest auf Apache Wicket
[Linux] Starten Sie den Apache-Container mit Docker