Кстати, а HashMapпо природе неупорядочен. Вы уверены, что вам не нужно TreeMap(автоматическая сортировка по ключу) или LinkedHashMap(поддерживает порядок вставки)?
Тем не менее , скриптлеты (необработанный код Java в файлах JSP и т. Д. <% %>) Считаются плохой практикой . Я рекомендую установить JSTL (просто поместите JAR-файл /WEB-INF/libи объявите необходимые теги в верхней части JSP). У него есть <c:forEach>тег, который можно перебирать среди других Map. Каждая итерация даст вам Map.Entryответ, который в свою очередь имеет getKey()и getValue()методы.
Вам нужно Servletили, ServletContextListenerчтобы разместить ${countries}в нужном объеме. Если предполагается, что этот список основан на запросах, используйте Servlets 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);}
Или, если предполагается, что этот список является константой всего приложения, используйте ServletContextListeners, contextInitialized()чтобы он загружался только один раз и сохранялся в памяти:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
В обоих случаях countriesбудет доступен в EL по ${countries}.
@Khue: да, вы также можете поместить атрибуты в сеансе. Я только не понимаю, почему вы хотели бы дублировать данные приложения в течение нескольких сеансов.
BalusC
Я думаю, что в случае сессионной информации. Спасибо за очень хорошее объяснение.
Khue Vu
Я уверен, что ответ очевиден, но - почему скриптлеты считаются плохой практикой? В отсутствие JSTL из-за поддержки устаревшего приложения это мой единственный вариант.
Зиббобз
@Zibbobz: текст "плохая практика" является ссылкой. Нажмите здесь.
BalusC
1
В зависимости от того, что вы хотите выполнить в цикле, выполните одно из следующих действий:
HashMap
по природе неупорядочен. Вы уверены, что вам не нужноTreeMap
(автоматическая сортировка по ключу) илиLinkedHashMap
(поддерживает порядок вставки)?Ответы:
Точно так же, как в обычном Java-коде.
Тем не менее , скриптлеты (необработанный код Java в файлах JSP и т. Д.
<% %>
) Считаются плохой практикой . Я рекомендую установить JSTL (просто поместите JAR-файл/WEB-INF/lib
и объявите необходимые теги в верхней части JSP). У него есть<c:forEach>
тег, который можно перебирать среди другихMap
. Каждая итерация даст вамMap.Entry
ответ, который в свою очередь имеетgetKey()
иgetValue()
методы.Вот основной пример:
Таким образом, ваша конкретная проблема может быть решена следующим образом:
Вам нужно
Servlet
или,ServletContextListener
чтобы разместить${countries}
в нужном объеме. Если предполагается, что этот список основан на запросах, используйтеServlet
sdoGet()
:Или, если предполагается, что этот список является константой всего приложения, используйте
ServletContextListener
s,contextInitialized()
чтобы он загружался только один раз и сохранялся в памяти:В обоих случаях
countries
будет доступен в EL по${countries}
.Надеюсь это поможет.
Смотрите также:
источник
В зависимости от того, что вы хотите выполнить в цикле, выполните одно из следующих действий:
countries.keySet()
countries.entrySet()
countries.values()
источник
Ниже код работает для меня
сначала я определил,
partnerTypesMap
как показано ниже на стороне сервера,после добавления значений к нему я добавил объект
model
,При отображении страницы я использую ниже,
foreach
чтобы распечатать их по одному.источник