2013-05-06 11 views
8

Ich habe einige Probleme, eine Schlüssel-Wert-Karte in Velocity zu verwenden.Velocity Template Engine - Schlüssel-Wert-Karte

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

$myMap ={} 

$myMap.put("mykey1", "myvalue") 
$myMap.delete("mykey1") 
$myMap.getValue("mykey1") 

Antwort

3

Haben Sie versucht zu tun:

#set($myMap = {}) 

Also, stellen Sie sicher, dass Sie eine moderne Version von Geschwindigkeit verwenden. Alte hatten in VTL keine Kartensyntax.

+0

Oh, ich habe wahrscheinlich die ganze Zeit einen Fehler gemacht. #set ($ myMap = {}) + $ myMap.put ("mykey1", "myvalue") erstellt die Ausgabe> $ myMap.put ("mykey1", "meinWert"). Ich habe gerade mit Velocity begonnen. Ich dachte, wenn der Befehl Teil der Ausgabe ist, wurde der Befehl nicht akzeptiert/erkannt. Ist es ein Fehler oder warum der Befehl Teil der Ausgabe ist, wenn alles korrekt läuft? – Wagner

14

Als Nathan sagte, sollten Sie verwenden:

#set ($myMap = {}) 

eine neue Karte zu erstellen und sie zu einer Variablen zuweisen.

Nun, warum ist der put Aufruf gedruckt.

  1. Alles, was nicht in einer Richtlinie ist, wie #set(not printed) oder #if(not printed) oder #foreach(again not printed), gedruckt wird, einschließlich freiem Text, Variablen und Methode aufruft.

  2. Geschwindigkeit 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, buchstäblich in die Ausgabe ausgegeben.

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

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

diese Theorie zu testen, können Sie dies tun:

#set ($myMap = {}) 
$myMap.put('key', 'first value') 
$myMap.put('key', 'second value') 
$myMap.get('key') 

Dieses gedruckt wird:

$myMap.put('key', 'first value') 
first value 
second value 
Sie dies tun können

Es gibt zwei Dinge, die die Linie isn‘ t gedruckt:

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

  2. den stillen Methodenaufruf verwenden: $!myMap.put('key', 'value')

Ich würde die ersten empfehlen, da die zweiten noch etwas gedruckt wird, wenn Sie einen vorhandenen Wert sind zu ersetzen .