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?
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 .
Velocity 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, in die Ausgabe ausgegeben.
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.
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:
Speichern Sie das Ergebnis der Funktion in einer temporären Variablen: #set ($discard = $myMap.put('key', 'value')
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.
Haben Sie versucht:
%Vor%Stellen Sie außerdem sicher, dass Sie eine moderne Version von Velocity verwenden. Alte hatten in VTL keine Kartensyntax.
Tags und Links transformation apache templates velocity