2010-08-09 10 views
2

J'essaie d'accéder aux éléments d'une HashMap. Les clés de cette HashMap sont définies par un Enum.Accès aux éléments de la carte via la clé Enum dans Freemarker

Après avoir traversé la documentation, je me suis dit que pour pouvoir accéder au Enum, je dois l'envoyer à Freemarker comme ceci:

BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); 
TemplateHashModel enumModels = wrapper.getEnumModels(); 
TemplateHashModel fieldTypeModel = (TemplateHashModel)enumModels.get("com.example.MinisiteFieldType"); 
root.put("fieldtypes", fieldTypeModel); 

Dans mon .ftl j'ai essayé les éléments suivants:

${myelement.mymap[fieldtypes.SEOTEXT]} 

Cependant, je reçois: expression myelement.mymap [fieldtypes.SEOTEXT] est non définie en ligne X ...

Je voulais vous assurer que je cartographié l'e num correctement, donc j'ai essayé:

${fieldtypes.SEOTEXT} 

Cela n'a pas imprimer quoi que ce soit, me laissant se demander il a par wether, ou tout simplement ne pouvait pas être imprimé.

En Java debug, juste avant d'insérer la carte TemplateHashModel dans ma racine, « fieldTypeModel » est rempli avec les données correctes ...

Toute aide serait appréciée!

Bart

Répondre

1

Je soupçonne que votre problème est qu'en utilisant le [] syntaxe pour accéder à votre carte, vous indiquez implicitement Freemarker de le traiter comme un hachage. Cela peut ne pas fonctionner comme vous l'attendez - le hash représentera probablement l'objet Map, en mappant 'size' et 'containsKey' et ainsi de suite aux méthodes Java. Au lieu de cela, essayez:

${myelement.mymap.get(fieldtypes.SEOTEXT)} 


Comme une note de côté, je ne l'ai jamais essayé d'accéder à énumérations par la méthode que vous décrivez, mais il y a une autre façon d'accéder à des constantes de Java à partir d'un modèle qui ne nécessite pas de code Java, donc ce qui suit devrait également fonctionner:

${myelement.mymap.get(stack.findValue("@[email protected]"))} 
+1

J'ai essayé l'exemple .get(), mais j'ai "mymap.get est indéfini en ligne ..." :( –