Depuis 2.3.25, faites-le comme ceci:
<#list user as propName, propValue>
${propName} = ${propValue}
</#list>
Notez que cela fonctionne également avec des clés sans chaîne (contrairement à map[key], qui devait être écrite comme map?api.get(key)alors).
Avant 2.3.25, la solution standard était:
<#list user?keys as prop>
${prop} = ${user[prop]}
</#list>
Cependant, certaines intégrations FreeMarker vraiment anciennes utilisent une configuration étrange, où les Mapméthodes publiques (comme getClass) apparaissent comme des clés. Cela se produit lorsqu'ils utilisent un pur BeansWrapper(au lieu de DefaultObjectWrapper) dont la simpleMapWrapperpropriété a été laissée active false. Vous devriez éviter une telle configuration, car elle mélange les méthodes avec des Mapentrées réelles . Mais si vous avez cette configuration malheureuse, le moyen d'échapper à la situation en utilisant les méthodes Java exposées, telles que user.entrySet(), user.get(key), etc., et ne pas utiliser les constructions de langage de template comme ?keysou user[key].