A propósito, a HashMapé por natureza desordenado. Tem certeza de que não precisa TreeMap(classificar automaticamente por chave) ou LinkedHashMap(mantém a ordem de inserção)?
BalusC 02/12/2009
Respostas:
308
Da mesma maneira que você faria no código Java normal.
No entanto , scriptlets (código Java bruto em arquivos JSP, essas <% %>coisas) são considerados uma prática ruim . Eu recomendo instalar o JSTL (basta inserir o arquivo JAR /WEB-INF/libe declarar os taglibs necessários na parte superior do JSP). Possui uma <c:forEach>tag que pode iterar entre outras Map. Toda iteração fornecerá uma Map.Entryresposta que, por sua vez, possui métodos getKey()e getValue()métodos.
Você precisa de um Servletou um ServletContextListenerpara colocar o ${countries}no escopo desejado. Se essa lista deve ser baseada em solicitações, use o 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, se essa lista deve ser uma constante em todo o aplicativo, use ServletContextListeners contextInitialized()para que ela seja carregada apenas uma vez e mantida na memória:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
Em ambos os casos, o countriesestará disponível no EL por ${countries}.
@ Khue: sim, você também pode colocar atributos na sessão. Só não vejo por que você deseja duplicar os dados de todo o aplicativo em várias sessões.
BalusC
Eu acho que no caso de informações baseadas em sessão. Obrigado pela explicação muito agradável.
quer
Tenho certeza de que a resposta é óbvia, mas - por que os scriptlets são considerados uma má prática? Na ausência de JSTL devido à manutenção de um aplicativo herdado, esta é minha única opção.
Zibbobz
@Zibbobz: o texto "más práticas" é um link. Clique nisso.
BalusC
1
Dependendo do que você deseja realizar dentro do loop, itere sobre um deles:
HashMap
é por natureza desordenado. Tem certeza de que não precisaTreeMap
(classificar automaticamente por chave) ouLinkedHashMap
(mantém a ordem de inserção)?Respostas:
Da mesma maneira que você faria no código Java normal.
No entanto , scriptlets (código Java bruto em arquivos JSP, essas
<% %>
coisas) são considerados uma prática ruim . Eu recomendo instalar o JSTL (basta inserir o arquivo JAR/WEB-INF/lib
e declarar os taglibs necessários na parte superior do JSP). Possui uma<c:forEach>
tag que pode iterar entre outrasMap
. Toda iteração fornecerá umaMap.Entry
resposta que, por sua vez, possui métodosgetKey()
egetValue()
métodos.Aqui está um exemplo básico:
Assim, seu problema específico pode ser resolvido da seguinte maneira:
Você precisa de um
Servlet
ou umServletContextListener
para colocar o${countries}
no escopo desejado. Se essa lista deve ser baseada em solicitações, use oServlet
'sdoGet()
:Ou, se essa lista deve ser uma constante em todo o aplicativo, use
ServletContextListener
scontextInitialized()
para que ela seja carregada apenas uma vez e mantida na memória:Em ambos os casos, o
countries
estará disponível no EL por${countries}
.Espero que isto ajude.
Veja também:
fonte
Dependendo do que você deseja realizar dentro do loop, itere sobre um deles:
countries.keySet()
countries.entrySet()
countries.values()
fonte
O código abaixo funciona para mim
primeiro eu defini
partnerTypesMap
como abaixo no lado do servidor,depois de adicionar valores, adicionei o objeto a
model
,Ao renderizar a página, uso abaixo
foreach
para imprimi-las uma a uma.fonte