2014-10-19 19 views
14

Sono novizio di baffi e si chiedeva come iterare oltre HashMap usando baffi dato questo MapCome iterare mappa utilizzando i baffi in java

Map mapA = new HashMap(); 

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

La mappa nomi chiave variano. Idealmente, voglio i baffi per scorrere sia la sua chiave che i suoi valori. Quindi, in java che sarà simile a questa:

for (Map.Entry<String, Object> entry : mapA.entrySet()) { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    // ... 
} 

Così qualcuno può dirmi come ottenere sopra i baffi. Voglio dire come sarebbe il modello? Ho provato questo modello, ma non ha avuto fortuna finora :(

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

Così, quando ho eseguito questo modello, l'uscita <li> tag esce vuoto, perché? Grazie.

+0

ricerca correlata http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-mustache-js – Kirby

+0

Penso che il più vicino che puoi venire sia quello di avvolgere i tuoi oggetti 'Elenco' e recupera quello – Kirby

+0

C'è anche un errore di sintassi nel modello. L'ultima riga dovrebbe essere '{{/ mapA}}' invece di '{{/ mapA>' – Kirby

risposta

10

non so baffi ma basandosi su alcuni campioni di codice che ho visto, penso che si dovrebbe definire una variabile entrySet nel codice Java come questo

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

e utilizzarlo al posto di mapA in baffi codice

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

Funzionava davvero? L'ho provato e non funziona – Dhiraj

+0

All'epoca avevo basato la mia risposta su esempi di codice e documentazione. Il PO ha accettato la risposta, quindi ho pensato che funzionasse per lui. – Dici

+1

Ha funzionato per me, ma ho dovuto configurare MustacheFactory per consentire l'introspezione dei metodi in una java.util.Map. Sto usando la versione java della libreria dei baffi da qui: https://github.com/spullara/mustache.java – Dhiraj

0

Come @Dici accennato in precedenza, è possibile utilizzare un entrySet. Non è necessario utilizzare alcuna opzione speciale in fabbrica e può passarla direttamente a execute. Nel modello è possibile utilizzare una mappa di livello superiore se il modello è molto semplice.

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(); 

Baffi Template (map.template)

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

Risultato

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