2010-10-23 8 views
3

J'ai hashmap qui a été créé sur une page en utilisant la balise struts2 <s:set>. Il ressemble à ceciAccéder à un HashMap en utilisant Struts 2

<s:set var="mymap" value="#request.mymap"/> 

À un certain moment dans la page, je dois obtenir une valeur de la table de hachage basée sur une clé, et je veux le faire en utilisant OGNL.

La clé est générée sur la base d'une logique, que je stocke en utilisant une autre balise <s:set>. Quelque chose comme ceci

<s:set var="mykey" value="1"> 

Je dois obtenir une valeur de la hashmap en utilisant cette clé. Et j'ai besoin de l'afficher.

Comment appeler simplement la fonction get sur le hashmap?

J'ai essayé

<s:property value="#mymap[#mykey]"/> 

et ce

<s:property value="#mymap[%{#mykey}]"/> 

et ce

<s:property value="%{#mymap[%{#mykey}}]"/> 

Le troisième ne fonctionne évidemment pas à cause du problème d'imbrication.
Mais la même logique d'imbrication s'applique également au deuxième cas, en raison de la manière dont l'attribut value est géré. Cependant, aucun ne semble fonctionner pour moi.

Le problème ici est que ma clé est inconnue. C'est une chaîne générée dynamiquement basée sur un motif. J'ai besoin d'accéder à l'objet stocké dans le hashmap en utilisant cette clé dynamique. Et en raison de l'incapacité de nogning ognl, je suis dans une solution. Je suppose que le problème est très simple. J'ai presque l'impression de l'avoir, mais d'une manière ou d'une autre, la solution m'échappe.

+0

http://struts2-java.blogspot.sg/2008/09/ognl-4.html – Cid

Répondre

3

Je suppose que j'utilisais une version différente de struts dans laquelle l'utilisation du% {} était nécessaire pour que l'expression soit évaluée. J'ai changé les fichiers jar maintenant. Ce est ce qui a fait le travail pour moi:

<s:property value="#mymap.[#mykey2]"/> 

Mon problème venait parce que je voulais l'utiliser dans un href pour une s: une étiquette. Et sans l'opérateur% {}, l'expression n'était pas évaluée. Donc, je suppose, j'avais raison au début lui-même. Le reste du temps, c'était juste que j'étais stupide. :>

Mise à jour: J'ai écrit un article de blog sur la question, au cas où quelqu'un serait intéressé. http://mycodefixes.blogspot.com/2010/11/struts-2-creating-and-accessing-maps.html