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.
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.
Geschwindigkeit kann nicht zwischen $myMap.get('mykey')
und $myMap.put('key', 'value')
unterscheiden, daher wird das Ergebnis des Aufrufs put
gedruckt.
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.
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.
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:
Speichern Sie das Ergebnis der Funktion in einer temporären Variablen: #set ($discard = $myMap.put('key', 'value')
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 .
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