A HashMapist übrigens von Natur aus ungeordnet. Sind Sie sicher, dass Sie dies nicht benötigen TreeMap(automatische Sortierung nach Schlüssel) oder LinkedHashMap(Beibehaltungsreihenfolge beibehalten)?
Allerdings , Scriptlets (raw Java - Code in JSP - Dateien, diese <% %>Dinge) ist eine als schlechte Praxis . Ich empfehle, JSTL zu installieren (legen Sie einfach die JAR-Datei ab /WEB-INF/libund deklarieren Sie die erforderlichen Taglibs über JSP). Es hat ein <c:forEach>Tag, das unter anderem über iterieren kann Map. Jede Iteration wird Ihnen eine Map.EntryRückseite , die wiederum hat getKey()und getValue()Methoden.
Sie benötigen ein Servletoder ein ServletContextListener, um das ${countries}in den gewünschten Bereich zu platzieren. Wenn diese Liste anforderungsbasiert sein soll, verwenden Sie ServletFolgendes 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);}
Oder wenn diese Liste eine anwendungsweite Konstante sein soll, verwenden Sie ServletContextListener's, contextInitialized()damit sie nur einmal geladen und gespeichert wird:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
In beiden Fällen countrieswird der in EL von verfügbar sein ${countries}.
@ Khue: Ja, Sie können auch Attribute in die Sitzung einfügen. Ich verstehe nur nicht, warum Sie anwendungsweite Daten über mehrere Sitzungen hinweg duplizieren möchten.
BalusC
Ich denke im Fall von sitzungsbasierten Informationen. Danke für die sehr nette Erklärung.
Khue Vu
Ich bin mir sicher, dass die Antwort offensichtlich ist, aber - warum werden Scriptlets als schlechte Praxis angesehen? In Abwesenheit von JSTL aufgrund der Wartung einer Legacy-Anwendung ist dies meine einzige Option.
Zibbobz
@Zibbobz: Der Text "schlechte Praxis" ist ein Link. Klick es an.
BalusC
1
Je nachdem, was Sie in der Schleife erreichen möchten, durchlaufen Sie stattdessen eine der folgenden Optionen:
HashMap
ist übrigens von Natur aus ungeordnet. Sind Sie sicher, dass Sie dies nicht benötigenTreeMap
(automatische Sortierung nach Schlüssel) oderLinkedHashMap
(Beibehaltungsreihenfolge beibehalten)?Antworten:
Genau wie bei normalem Java-Code.
Allerdings , Scriptlets (raw Java - Code in JSP - Dateien, diese
<% %>
Dinge) ist eine als schlechte Praxis . Ich empfehle, JSTL zu installieren (legen Sie einfach die JAR-Datei ab/WEB-INF/lib
und deklarieren Sie die erforderlichen Taglibs über JSP). Es hat ein<c:forEach>
Tag, das unter anderem über iterieren kannMap
. Jede Iteration wird Ihnen eineMap.Entry
Rückseite , die wiederum hatgetKey()
undgetValue()
Methoden.Hier ist ein einfaches Beispiel:
Somit kann Ihr spezielles Problem wie folgt gelöst werden:
Sie benötigen ein
Servlet
oder einServletContextListener
, um das${countries}
in den gewünschten Bereich zu platzieren. Wenn diese Liste anforderungsbasiert sein soll, verwenden SieServlet
FolgendesdoGet()
:Oder wenn diese Liste eine anwendungsweite Konstante sein soll, verwenden Sie
ServletContextListener
's,contextInitialized()
damit sie nur einmal geladen und gespeichert wird:In beiden Fällen
countries
wird der in EL von verfügbar sein${countries}
.Hoffe das hilft.
Siehe auch:
quelle
Je nachdem, was Sie in der Schleife erreichen möchten, durchlaufen Sie stattdessen eine der folgenden Optionen:
countries.keySet()
countries.entrySet()
countries.values()
quelle
Der folgende Code funktioniert für mich
Zuerst habe ich das
partnerTypesMap
Gleiche unten auf der Serverseite definiert.Nachdem ich Werte hinzugefügt hatte, fügte ich das Objekt hinzu
model
.Beim Rendern der Seite verwende ich unten
foreach
, um sie einzeln zu drucken.quelle