Nawiasem mówiąc, z HashMapnatury jest nieuporządkowany. Czy na pewno nie potrzebujesz TreeMap(sortowanie automagiczne według klucza) lub LinkedHashMap(utrzymuje kolejność reklamową)?
Jednakże , scriptlets (surowy kod Java w plikach JSP, tych <% %>miejscach) są uważane za biedny praktyka . Zalecam zainstalowanie JSTL (po prostu upuść plik JAR /WEB-INF/libi zadeklaruj potrzebne taglibs na górze JSP). Posiada <c:forEach>tag, który może iterować między innymi po Maps. Każda iteracja da ci Map.Entryzwrot, który z kolei ma getKey()i getValue()metody.
Potrzebujesz a Servletlub a, ServletContextListeneraby umieścić ${countries}w żądanym zakresie. Jeśli ta lista ma być oparte na żądanie, a następnie użyć 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);}
Lub jeśli ta lista ma być stałą dla całej aplikacji, użyj ServletContextListeners contextInitialized(), aby została załadowana tylko raz i przechowywana w pamięci:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
W obu przypadkach countriesbędzie dostępny w EL do godz${countries} .
@Khue: tak, możesz również umieścić atrybuty w sesji. Nie rozumiem tylko, dlaczego chcesz powielać dane całej aplikacji w wielu sesjach.
BalusC
Myślę w przypadku informacji opartych na sesji. Dzięki za bardzo miłe wyjaśnienie.
Khue Vu
Jestem pewien, że odpowiedź jest oczywista, ale - dlaczego skryptlety są uważane za kiepską praktykę? W przypadku braku JSTL z powodu utrzymywania starszej aplikacji jest to moja jedyna opcja.
Zibbobz
@Zibbobz: tekst „słaba praktyka” to link. Kliknij na to.
BalusC
1
W zależności od tego, co chcesz osiągnąć w pętli, zamiast tego wykonaj iterację jednej z nich:
HashMap
natury jest nieuporządkowany. Czy na pewno nie potrzebujeszTreeMap
(sortowanie automagiczne według klucza) lubLinkedHashMap
(utrzymuje kolejność reklamową)?Odpowiedzi:
Tak samo, jak w normalnym kodzie Java.
Jednakże , scriptlets (surowy kod Java w plikach JSP, tych
<% %>
miejscach) są uważane za biedny praktyka . Zalecam zainstalowanie JSTL (po prostu upuść plik JAR/WEB-INF/lib
i zadeklaruj potrzebne taglibs na górze JSP). Posiada<c:forEach>
tag, który może iterować między innymi poMap
s. Każda iteracja da ciMap.Entry
zwrot, który z kolei magetKey()
igetValue()
metody.Oto podstawowy przykład:
W ten sposób Twój konkretny problem można rozwiązać w następujący sposób:
Potrzebujesz a
Servlet
lub a,ServletContextListener
aby umieścić${countries}
w żądanym zakresie. Jeśli ta lista ma być oparte na żądanie, a następnie użyćServlet
„sdoGet()
:Lub jeśli ta lista ma być stałą dla całej aplikacji, użyj
ServletContextListener
scontextInitialized()
, aby została załadowana tylko raz i przechowywana w pamięci:W obu przypadkach
countries
będzie dostępny w EL do godz${countries}
.Mam nadzieję że to pomoże.
Zobacz też:
źródło
W zależności od tego, co chcesz osiągnąć w pętli, zamiast tego wykonaj iterację jednej z nich:
countries.keySet()
countries.entrySet()
countries.values()
źródło
Poniższy kod działa u mnie
najpierw zdefiniowałem
partnerTypesMap
jak poniżej po stronie serwera,po dodaniu do niego wartości dodałem obiekt do
model
,Podczas renderowania strony używam poniżej,
foreach
aby wydrukować je jeden po drugim.źródło