Velocity Template Engine - Schlüssel-Wert-Karte

8

Ich habe Probleme, eine Key-Value-Map in Velocity zu verwenden.

Jemand hat ein Beispiel für diese Funktionalität?

%Vor%     
Wagner 06.05.2013, 11:48
quelle

2 Antworten

14

Wie Nathan gesagt hat, solltest du Folgendes verwenden:

%Vor%

, um eine neue Karte zu erstellen und sie einer Variablen zuzuordnen.

Nun, warum wird der put Aufruf gedruckt?

  1. Alles, was nicht in einer Direktive enthalten ist, wie #set(not printed) oder #if(not printed) oder #foreach(again not printed) , wird gedruckt, einschließlich Freitext, Variablen und Methodenaufrufe .

  2. Velocity kann nicht zwischen $myMap.get('mykey') und $myMap.put('key', 'value') unterscheiden, daher wird das Ergebnis des Aufrufs put gedruckt.

  3. Wenn etwas nicht richtig ausgewertet werden kann, weil eine Variable nicht definiert ist oder irgendwo in der Zeile eine Methode null zurückgibt, wird der Code, der nicht ausgewertet werden konnte, in die Ausgabe ausgegeben.

  4. Wie die Dokumentation der put -Methode angibt, gibt die Funktion den vorherigen Wert zurück, der für diesen Schlüssel gespeichert wurde, oder null , wenn überhaupt kein Wert festgelegt wurde.

  5. Zusammenfassend ist es normal, dass diese Zeile gedruckt wird.

Um diese Theorie auszuprobieren, können Sie Folgendes tun:

%Vor%

Dies wird gedruckt:

%Vor%

Es gibt zwei Dinge, die Sie tun können, damit die Zeile nicht gedruckt wird:

  1. Speichern Sie das Ergebnis der Funktion in einer temporären Variablen: #set ($discard = $myMap.put('key', 'value')

  2. Verwenden Sie den Aufruf der stillen Methode: $!myMap.put('key', 'value')

Ich würde die erste empfehlen, da die zweite noch etwas drucken wird, wenn Sie einen vorhandenen Wert ersetzen.

    
Sergiu Dumitriu 19.05.2013 01:21
quelle
3

Haben Sie versucht:

%Vor%

Stellen Sie außerdem sicher, dass Sie eine moderne Version von Velocity verwenden. Alte hatten in VTL keine Kartensyntax.

    
Nathan Bubna 06.05.2013 15:38
quelle