2014-10-19 5 views
14

ich Neuling bin Schnurrbart und frage mich, wie über HashMap iterieren Schnurrbart je MapWie Karte mit Schnurrbart in Java iterieren

Map mapA = new HashMap(); 

mapA.put("key1", "element 1"); 
mapA.put("key2", "element 2"); 
mapA.put("key3", "element 3"); 

Die Mapkey Namen gegeben werden. Im Idealfall möchte ich, dass der Mustache sowohl über den Schlüssel als auch über die Werte iteriert. Also in Java wird es so aussehen:

So kann mir jemand sagen, wie man oben in Schnurrbart erreichen kann. Ich meine, wie würde die Vorlage aussehen? Ich habe versucht, diese Vorlage hatte aber kein Glück so weit :(

{{#mapA}} 
    <li>{{key}}</li> 
    <li>{{value}}</li> 
{{/mapA> 

Also, wenn ich diese Vorlage ausführen, die Ausgabe <li> Tags kommen leer, warum? Dank.

+0

verwandte Quest ion hier http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-mustache-js – Kirby

+0

Ich denke, dass die nächste, die Sie kommen können, ist Ihre Eintragsmenge Objekte in einem verpacken 'List' und rufen Sie das – Kirby

+0

Es gibt auch einen Syntaxfehler in der Vorlage. Die letzte Zeile sollte '{{mapA}}' anstelle von '{{/ mapA>' – Kirby

Antwort

10

Ich weiß nicht, Schnurrbart aber auf einigen Proben von Code zu stützen ich gesehen habe, denke ich, sollten Sie eine entrySet Variable in Ihrem Java-Code wie dieses und es

Set<Map.Entry<String,Object>> entrySet = mapA.entrySet(); 

definieren anstelle von mapA in Ihrem Schnurrbart Code

{{#entrySet}} 
    <li>{{key}}</li> 
    <li>{{value}}</li> 
{{/entrySet}} 
+0

Hätte das wirklich funktionieren? Ich habe es versucht und es funktioniert nicht – Dhiraj

+0

Damals hatte ich meine Antwort auf Codebeispiele und Dokumentation basiert. Der OP akzeptierte die Antwort, also nahm ich an, dass es für ihn funktionierte. – Dici

+1

Es hat für mich funktioniert, aber ich musste die MoustacheFactory konfigurieren, um die Introspektion von Methoden in einer java.util.Map zu erlauben. Ich benutze die Java-Version der Schnurrbart-Bibliothek von hier: https://github.com/spullara/mustache.java – Dhiraj

0

Wie @Dici oben erwähnt, können Sie eine entrySet verwenden. Sie müssen keine speziellen Optionen im Werk verwenden und können diese direkt an execute übergeben. In Ihrer Vorlage können Sie eine Karte der obersten Ebene verwenden, wenn Ihre Vorlage sehr einfach ist.

Java

Map<String, String> map = new HashMap<>(); 
map.put("key1", "value1"); 
map.put("key2", "value2"); 

Writer writer = new OutputStreamWriter(System.out); 
MustacheFactory mustacheFactory = new DefaultMustacheFactory(); 
Mustache template = mustacheFactory.compile("map.template"); 
template.execute(writer, map.entrySet()).close(); 

Schnurrbart Vorlage (map.template)

{{#.}} 
keylabel:{{key}} : valuelabel:{{value}} 
{{/.}} 

Ergebnis

keylabel:key1 : valuelabel:value1 
keylabel:key2 : valuelabel:value2