[java] JSP에서 HashMap을 반복하는 방법은 무엇입니까?

HashMapJSP에서 루프를 어떻게 반복 할 수 있습니까?

<%
    HashMap<String, String> countries = MainUtils.getCountries(l);
%>

<select name="country">
    <%
        // Here I need to loop through countries.
    %>
</select>



답변

일반적인 Java 코드에서와 같은 방식입니다.

for (Map.Entry<String, String> entry : countries.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    // ...
}

그러나 , 스크립틀릿 (JSP 파일, 그 원시 자바 코드 <% %>일)는 고려 가난한 연습 . JSTL 을 설치하는 것이 좋습니다 (JAR 파일을 드롭하고 JSP 상단에 /WEB-INF/lib필요한 taglib 를 선언하십시오 ). 그것은 <c:forEach>다른 것들 사이에서 반복 할 수 있는 태그를 가지고 있습니다 Map. 반복 할 때마다 Map.Entry뒤로 돌려 주는 방법 getKey()getValue()방법이 있습니다.

기본 예는 다음과 같습니다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach items="${map}" var="entry">
    Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>

따라서 특정 문제는 다음과 같이 해결할 수 있습니다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<select name="country">
    <c:forEach items="${countries}" var="country">
        <option value="${country.key}">${country.value}</option>
    </c:forEach>
</select>

원하는 범위 에 배치 하려면 a Servlet또는 a ServletContextListener가 필요합니다 ${countries}. 이 목록은 요청 기반이 될 것으로 예상되는 경우, 사용 Servlet의를 doGet():

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    Map<String, String> countries = MainUtils.getCountries();
    request.setAttribute("countries", countries);
    request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
}

또는이 목록은 다음 사용하는 응용 프로그램 전체 일정하다고 가정하는 경우 ServletContextListenercontextInitialized()이 한 번만로드되고 메모리에 보존 조치 할 수 있도록 :

public void contextInitialized(ServletContextEvent event) {
    Map<String, String> countries = MainUtils.getCountries();
    event.getServletContext().setAttribute("countries", countries);
}

두 경우 모두에 의해 ELcountries 에서 사용할 수 있습니다 .${countries}

도움이 되었기를 바랍니다.

또한보십시오:


답변

루프 내에서 달성하고자하는 것에 따라 대신 다음 중 하나를 반복하십시오.

  • countries.keySet()
  • countries.entrySet()
  • countries.values()

답변

아래 코드는 저에게 효과적입니다.

먼저 partnerTypesMap서버 측에서 아래와 같이 정의했습니다 .

Map<String, String> partnerTypes = new HashMap<>();

값을 추가 한 후에 객체를 추가했습니다 model.

model.addAttribute("partnerTypesMap", partnerTypes);

페이지를 렌더링 할 때 아래 foreach에서 하나씩 인쇄합니다.

<c:forEach items="${partnerTypesMap}" var="partnerTypesMap">
      <form:option value="${partnerTypesMap['value']}">${partnerTypesMap['key']}</form:option>
</c:forEach>


답변