2016-01-19 10 views
8

Angesichts einer ftl-Datei, die wie folgt strukturiert ist (nur ein Beispiel) Ich bin in der Lage, alle Elemente in Ebene 1 zu ersetzen/einfügen, was in Ordnung ist.Freemarker - Erstellen mehrerer Kind-Tags

Meine Verwirrung entsteht, wenn es mehrere Level2 gibt - zum Beispiel könnte es viele Male wiederholen. Als solche meinen Prozess

<parent> 
    <level1> 
     <a>${a}</a> 
     <b>${b}</b> 
     <c>${c}</c> 
     <d>${d}</d> 
    </level1> 
    <level2> 
     <e><${e}</e> 
     <f><${f}</f> 
     <g><${g}</g> 
     <h><${h}</h> 
     <i><${i}</i> 
     <j><${j}</j> 
    </level2> 
</parent> 

    map.put("a", "valuefora"); 
    map.put("b", "valueforb"); 
    map.put("c", "valueforc"); 
    map.put("d", "valueford"); 

    Configuration cfg = new Configuration(); 
    cfg.setDirectoryForTemplateLoading(new File("C:\\templates")); 
    Template temp = cfg.getTemplate("freemarker.ftl"); 
    Writer out = new OutputStreamWriter(System.out); 
    temp.process(map, out); 

An dieser Stelle ein Schmerzpunkt hier für den Ersatz treffen wird - vorausgesetzt, ich eine Liste von Werten haben mehrere Level2 Knoten haben - wie würde ich über die Herstellung dieses gehen, um den Stil oben gezeigt verwenden?

Dank

Antwort

2

Ich bin nicht sicher, ob ich Ihre Frage wirklich verstehen, aber ich glaube, Sie würden nur die Freemarker list -command verwenden. Sie würden Maps oder Listen in Ihren Kontext einfügen. Die list -command ist here dokumentiert

<#list your.object.or.map as listElem> 
    <level2> 
    <e>${listElem.e}</e> 
    <f>${listElem.f}</f> 
    </level2> 
</#list> 

Ihr Kontextobjekt, muss nur eine entsprechende Karte oder Objekt.

Die quickstart guide (siehe Die List-Direktive) enthält auch ein Beispiel für die Verwendung der List-Direktive.

+0

vielen Dank! Es war die Punktnotation, die mir nicht bewusst war – Biscuit128