newMap - Listenelement in Schleife befüllen

Hallo zusammen,

beschäftige mich grade zum erstem Mal mit eurer newMap-Funktion, scheitere aber grade daran, eine Liste mit Elementen zu befüllen.

Ich verarbeite eine JSON mit Packages und möchte für jede Position in dem Paket eine Element in einer Liste an Packpositionen haben.

{
"Paket": 123
"Positionen" [
{"Pos": 1,......},
{"Pos": 2,......}
]
}

Ich orientiere mich an eurem Beispiel

<#compress><#assign m =
newMap({
    "id": "123",
    "total": 123.99,
    "qty": 1,
    "items" : []
})
.set("description","foo bar")
>

<#assign silent>
${m["items"].add(newMap({"itemId": 1}))}
${m["items"].add(newMap({"itemId": 2}))}
</#assign>

${m.delete("description")}

${toJSON(m)}</#compress> 

Nur statt die Map als Freemarker-Map zu initialisieren, befülle ich die schrittweise per Add/Set-Funktion.

<#assign package_map = newMap()>
${package_map.set("TrackingNumber", "123")}
${package_map.set("TrackingNumberReturn", "789")}
${package_map.set("items", [])}
${package_map["items"].add(newMap({"itemId": 1}))}
${package_map["items"].add(newMap({"itemId": 2}))}

Da kriege ich aber einen nichts-sagenden Fehler „Script error: null“. Wenn ich stattdessen das items-Element in der Map definiere, klappt alles.

<#assign package_map = newMap({"items" : []})>
${package_map.set("TrackingNumber", "123")}
${package_map.set("TrackingNumberReturn", "789")}
${package_map["items"].add(newMap({"itemId": 1}))}
${package_map["items"].add(newMap({"itemId": 2}))}

Aber wo liegt da der Unterschied?

P.S.: Gibt’s die Chance, dass es eine Silent-Variante von der add-Funktion geben wird? Oder muss man das True immer irgendwie in Freemarker-Skript selbst verschlucken?

Gruß
Gustav

Kann es sein, dass die Map-Objekte sich in der Vorschau komisch verhalten? Ich habe zwei Items, welche ich per .add meiner Map hinzufügen. In den folgenden Mapper-Vorschauen habe ich diese beiden Items dann aber teilweise doppelt oder dreifach drin.
In der richtigen Ausführung verhält es sich richtig.

Gruß
Gustav

Hallo,

ich habe zumindest eine Spur, woran es liegen könnte.
Bei den Daten der zweiten Zeile tauchen die Positionen aus der ersten Zeile auch wieder auf. Das Problem liegt also irgendwo in der Persistenz der Map-Objekte. Aber in meinem Code überschreibe ich alle Map-Objekte eigentlich. Daher weiß ich nicht, wie das passiert.