12
votes

Carte d'accès dans JSTL

J'ai: xxx pré>

du contrôleur, je mets dans le modèle: p> xxx pré>

Comment puis-je dans mon jSTL accéder à l'objet Sur la carte pour la clé Enum myenum.one, de manière nette? p>

${map[MyEnum.One]}


0 commentaires

4 Réponses :


12
votes

Vous ne pouvez pas. Votre meilleur pari est de changer votre carte pour utiliser Enum.name () comme clé: xxx pré>

Votre première approche fonctionnerait alors: p>

${map['One']} // works now


1 commentaires

Utilisez la fonction EL personnalisée - c'est la manière la plus maintenue.



15
votes

Ce n'est pas exactement vrai que vous ne pouvez pas le faire, mais la solution n'est pas complètement simple. Le problème est que el ne convertit pas la chaîne que vous transmettez en tant que clé de carte sur l'énum de vous correspond à vous, de mettre en $ {map ['one']} n'utilise pas l'ENum constante myenum.one dans la recherche de carte.

J'ai rencontré le même problème et je ne voulais pas revenir à une carte clé à chaîne, alors le défi était alors dans JSTL Comment obtenir la référence réelle Enum à utiliser dans la recherche de carte. P>

Ce qui est nécessaire, c'est d'obtenir les constantes ENUM dans la portée de la JSP afin que vous puissiez ensuite utiliser l'énumé réelle elle-même comme clé. Pour ce faire, dans le contrôleur, vous faites quelque chose comme ceci: p> xxx pré>

Qu'est-ce que vous avez fait ici est ajouté des variables dans la portée nommée en tant que représentation de chaîne de l'énum. (Vous pouvez bien sûr éviter de nommer des problèmes en prépendant le point de vue de l'E.TOSRING () avec une certaine valeur) P>

Maintenant, lorsque vous effectuez les suivants P>

${map[ONE]}


2 commentaires

Hein! Solution créative! :)


Assez beau aussi longtemps que vous n'êtes pas obligé d'utiliser des énumérations avec des constantes du même nom.



0
votes
<%@page import="my.package.MyEnum"%>

1 commentaires

Cela fonctionne sur Pivotal TC Server 3.1.1 (de STS) et Tomcat 8.0.28, mais cela ne fonctionne pas sur Tomcat 8.0.14



1
votes

J'utilise habituellement cette solution:

<%@page import="my.package.MyEnum"%>
<c:set var="One" value="<%=MyEnum.One %>" />
<c:set var="MyEnum_values" value="${map[One]}" />


0 commentaires