2017-08-14 6 views
0

J'essaie d'obtenir deux paramètres d'une HashMap de ArrayLists afin de construire une balise.Velocity Template foreach loop

Mon fichier .vm ressemble actuellement à ceci:

<ul style="list-style:none;"> 
    #foreach ($x in $documents) 
     <li><a href="${x.get("documentPath")}" target="_blank">${x.get("documentTitle")}</a></li> 
    #end 
</ul> 

Voici comment je construis le HashMap:

final ArrayList<Map<String, String>> documentsList = new ArrayList<>(); 
if (recallInfo.getDocuments() != null && !recallInfo.getDocuments().isEmpty()) 
{ 
    final String contextPath = ServletActionContext.getServletContext().getContextPath(); 
    for (final SessionDocument document : recallInfo.getDocuments()) 
    { 
     final String documentPath = contextPath + "/content/document/view?id=" + document.getId(); 
     final String documentTitle = Strings.shorten(document.getTitle(), 60); 
     Map<String, String> documents = new HashMap<>(); 
     documents.put("documentPath", documentPath); 
     documents.put("documentTitle", documentTitle); 
     documentsList.add(documents); 
    } 
} 
templateContext.put("documents", documentsList); 

Je me demande si cela est la syntaxe correcte à utiliser comme je Je ne reçois aucun résultat. J'ai construit les URL manuellement, donc je sais qu'elles sont correctes.

Répondre

1

Vous avez une liste de valeur de carte, mais ce que vous avez fait est juste une liste itérée. Vous devez faire l'itération pour la carte aussi afin d'obtenir deux valeurs

<ul style="list-style:none;"> 

    #foreach ($document in $documents) 
     #foreach ($map in $document.keySet()) 

      <li><a href="${document.get("documentPath")}" target="_blank">${document.get("documentTitle")}</a></li> 
     #end 
    #end 
</ul>