2016-08-04 19 views
0

Das Datenmodell für Freemarker zu verarbeiten ich verwende istKann ich eine Liste von String [] in Freemarker übergeben?

Map<String, Object> templateDataModel = new HashMap<>(); 

Ich habe eine Liste von String-Arrays, die ich so in diese Karte weitergeben möchte:

ArrayList<String[]> listOfServers = new ArrayList<>(); 

for (Server server : object.getServers) { 
    String[] ser = new String[2]; 
    //get the name 
    ser[0] = server.getName(); 
    //get the port 
    ser[1] = server.getPort(); 

    lostOfServers.add(ser); 
} 

templateDataModel.put(serverList, listOfServers); 

Der Grund für die Arraylist ist, dass der Server mindestens 2 Datenpunkte hat (in diesem Fall Name und Port) und eine String-Liste oder andere Sammlung kann nicht halten, was ich brauche (richtig, wenn ich falsch liege).

In meiner Freemarker Vorlage würde Ich mag Schleife dieser Liste von Servern und verschiedene Werte wie folgt angezeigt:

<#list serverList as server> 
    <tr> 
     <td>${server[0]}</th> 
    </tr> 
    <tr> 
     <td>${server[1]}</th> 
    </tr> 
</#list> 

Ich erhalte diese Meldung in meiner Ausgabe:

freemarker.template.DefaultObjectWrapper didn't convert java.util.ArrayList to a TemplateHashModel. 
Generally, you want to use a Map<String, Object> or a JavaBean as the root-map (aka. data-model) parameter. The Map key-s or JavaBean property names will be the variable names in the template. 

Es scheint, Ich kann das nicht tun. Ist das richtig? Wenn ja, wird jeder Hinweis zur Datenstruktur von Freemarker unterstützt?

Ich bin neu in Java und auf Freemarker lesen. Entschuldigen Sie bitte einige grundlegende Dinge, die ich nicht verstehe, aber ich würde wirklich gerne dieses freimütige Ding zum Funktionieren bringen.

EDIT: **************************

Hier habe ich beschlossen, mit

Map<String, List<List<String>>> 

statt

Map<String, List<String[]>> 

Template sieht wie folgt jetzt etwas:

<#list serverEntries as serverEntry> 
    <tr> 
     <#list serverEntry as serverAttribute> 
      <td>${serverAttribute}</th> 
     </#list> 
    </tr> 
</#list> 

Antwort

0

Aus Es erscheint die Fehlermeldung, dass Sie listOfServers (oder eine andere ArrayList) an Template.process (oder Environment.process) anstelle von templateDataModel übergeben haben.

+0

Ich habe überprüft, dass ich die Map und StringWriter an die Methode template.process übergebe. Danke für die Eingabe – Alan

+0

etwas, ich frage mich, ob es eine Array-Direktive gibt, oder wie man eine – Alan

+0

@Alan: Die Fehlermeldung sagt, dass Sie in einer 'ArrayList' übergeben haben. Vielleicht sehen Sie nicht den richtigen 'Template.process' Aufruf. Überprüfen Sie, wo der Aufruf in der Stapelüberwachung ausgeführt wurde. Ich bin mir nicht sicher, was Sie mit einer Array-Direktive meinen. – ddekany