Un des principes de base d'implémentation du moteur Freemarker est que le modèle de données ne peut être accessible qu'en lecture.
Il n'est pas possible de modifier une valeur issue d'un modèle de données lors de l'exécution d'un template.
Une des conséquences consterne le type Hash : Freemarker permet de créer de manière littérale un objet hash mais, une fois créé, il n'est pas possible de modifier cet objet (cliquez ici pour plus de détails).
Exemple :
<#assign hashVal = {"attr1": "val1", "attr2": "val2", "attr3": "val3"} /> <#list hashVal as aKey, aVal>...</#list> ${hashVal["attr2"]} <#-- Il est possible de parcourir les valeurs de hashVal ou d'acceder à une valeur d'attribut de hashVal mais il n'est pas possible de modifier une valeur d'attribut de hashVal ou d'ajouter / supprimer un attribut dans hashVal facilement --> <#-- Solution peu performante de modification d'une valeur d'attribut --> <#assign attrModified = "attr2" /> <#assign hashVal = hashVal + { attrModified : "val2Modified" }/> <#-- Solution peu performante de suppression d'un attribut --> <#assign hashVal = {"attr1": "val1", "attr2": "val2", "attr3": "val3"} /> <#assign attrToDelete = "attr2" , tmpHash = {} /> <#list hashVal as key, val> <#if key != attrToDelete> <#assign tmpHash = tmpHash + {key: val} /> </#if> </#list> <#assign hashVal = tmpHash />
Cette fonction retourne un objet de type Hash possédant des méthodes basiques d'ajout, de modification et de suppression. Elle peut prendre en argument :
- Soit aucun paramètre : l'objet Hash retourné est vide,
- Soit un objet Hash : l'objet Hash retourné est une copie. Ces attributs / valeurs sont identiques à l'objet Hash passé en paramètre,
- une clé de type String et une valeur de tout type : l'objet Hash retourné contiendra un seul attribut dont le nom est la valeur de la clé passée en paramètre et dont la valeur associée est celle passée en paramètre.
Paramètres
Hash |
originalHash |
L'objet Hash retourné contient les couples attributs/valeurs de originalHash. |
Optionnel |
Tout type |
value |
Valeur de l'attribut de nom "key" dans l'objet retourné |
Optionnel. Obligatoire si le premier paramètre est de type String |
Par exemple
<#-- Create empty hash --> <#assign newHash = hardisCore.createSimpleHash() /> Size of newHash:${newSeq?keys?size} <#-- Create Hash from another Hash --> <#assign originalHash = {"attr1": 1, "attr2":true} /> <#assign newHash = hardisCore.createSimpleHash(originalHash) /> Size of newHash:${newSeq?keys?size} <#-- Create Hash with one sub variable --> <#assign newHash = hardisCore.createSimpleHash("myKey", "myValue") /> Size of newHash:${newSeq?keys?size}