À propos, un HashMapest par nature non ordonné. Êtes-vous certain de ne pas avoir besoin de TreeMap(tri automatique par clé) ou LinkedHashMap(maintien de l'ordre d'insertion)?
BalusC
Réponses:
308
De la même manière que vous le feriez avec du code Java normal.
Cependant , les scriptlets (code Java brut dans les fichiers JSP, ces <% %>choses) sont considérés comme une mauvaise pratique . Je recommande d'installer JSTL (déposez simplement le fichier JAR /WEB-INF/libet déclarez les taglibs nécessaires en haut de JSP). Il a une <c:forEach>balise qui peut parcourir entre autres Maps. Chaque itération vous donnera un Map.Entryretour qui à son tour a getKey()et des getValue()méthodes.
Vous avez besoin d'un Servletou d'un ServletContextListenerpour placer le ${countries}dans la portée souhaitée. Si cette liste est censée être basée sur des requêtes, utilisez les Servlet's doGet():
protectedvoid doGet(HttpServletRequest request,HttpServletResponse response){Map<String,String> countries =MainUtils.getCountries();
request.setAttribute("countries", countries);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);}
Ou si cette liste est supposée être une constante à l'échelle de l'application, utilisez ServletContextListenerles contextInitialized()pour qu'elle ne soit chargée qu'une seule fois et conservée en mémoire:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
Dans les deux cas, le countriessera disponible en EL par ${countries}.
@Khue: oui, vous pouvez également mettre des attributs dans la session. Je ne vois pas pourquoi vous souhaiteriez dupliquer des données à l'échelle de l'application sur plusieurs sessions.
BalusC
Je pense en cas d'informations basées sur la session. Merci pour la très belle explication.
Khue Vu
Je suis sûr que la réponse est évidente mais - pourquoi les scriptlets sont-ils considérés comme une mauvaise pratique? En l'absence de JSTL en raison du maintien d'une application héritée, c'est ma seule option.
Zibbobz
@Zibbobz: le texte "mauvaise pratique" est un lien. Clique dessus.
BalusC
1
En fonction de ce que vous souhaitez accomplir dans la boucle, parcourez plutôt l'un de ces éléments:
HashMap
est par nature non ordonné. Êtes-vous certain de ne pas avoir besoin deTreeMap
(tri automatique par clé) ouLinkedHashMap
(maintien de l'ordre d'insertion)?Réponses:
De la même manière que vous le feriez avec du code Java normal.
Cependant , les scriptlets (code Java brut dans les fichiers JSP, ces
<% %>
choses) sont considérés comme une mauvaise pratique . Je recommande d'installer JSTL (déposez simplement le fichier JAR/WEB-INF/lib
et déclarez les taglibs nécessaires en haut de JSP). Il a une<c:forEach>
balise qui peut parcourir entre autresMap
s. Chaque itération vous donnera unMap.Entry
retour qui à son tour agetKey()
et desgetValue()
méthodes.Voici un exemple de base:
Ainsi, votre problème particulier peut être résolu comme suit:
Vous avez besoin d'un
Servlet
ou d'unServletContextListener
pour placer le${countries}
dans la portée souhaitée. Si cette liste est censée être basée sur des requêtes, utilisez lesServlet
'sdoGet()
:Ou si cette liste est supposée être une constante à l'échelle de l'application, utilisez
ServletContextListener
lescontextInitialized()
pour qu'elle ne soit chargée qu'une seule fois et conservée en mémoire:Dans les deux cas, le
countries
sera disponible en EL par${countries}
.J'espère que cela t'aides.
Voir également:
la source
En fonction de ce que vous souhaitez accomplir dans la boucle, parcourez plutôt l'un de ces éléments:
countries.keySet()
countries.entrySet()
countries.values()
la source
Le code ci-dessous fonctionne pour moi
J'ai d'abord défini la même
partnerTypesMap
chose ci-dessous côté serveur,après avoir ajouté des valeurs, j'ai ajouté l'objet à
model
,Lors du rendu de la page, j'utilise ci-dessous
foreach
pour les imprimer une par une.la source