जवाबों:
ठीक उसी तरह जैसे आप सामान्य जावा कोड में करते हैं।
for (Map.Entry<String, String> entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
हालांकि , स्क्रिप्टलेट्स (जेएसपी फाइलों में कच्चा जावा कोड, उन <% %>
चीजों) को एक खराब अभ्यास माना जाता है । मैं JSTL स्थापित करने की सलाह देता हूं (बस JAR फ़ाइल को ड्रॉप करें /WEB-INF/lib
और JSP के ऊपर आवश्यक टैगलिब घोषित करें )। यह एक <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>
आपको वांछित दायरे में जगह के लिए एक Servlet
या एक की आवश्यकता है। यदि इस सूची को अनुरोध-आधारित माना जाता है, तो 's : का उपयोग करें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);
}
या फिर इस सूची है, तो का उपयोग एक आवेदन चौड़ा निरंतर माना जाता है, तो ServletContextListener
's contextInitialized()
इतना है कि यह केवल एक बार लोड किया जाएगा और स्मृति में रखा:
public void contextInitialized(ServletContextEvent event) {
Map<String, String> countries = MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);
}
दोनों मामलों countries
में ईएल बाय में उपलब्ध होगा ${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>
HashMap
स्वभाव से अयोग्य है। क्या आप निश्चित हैं कि आपको ज़रूरत नहीं हैTreeMap
(कुंजी द्वारा स्वचालित प्रकार) याLinkedHashMap
(प्रविष्टि क्रम बनाए रखता है)?