উত্তর:
আপনি সাধারণ জাভা কোডে যেমন করতেন ঠিক তেমনভাবে।
for (Map.Entry<String, String> entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
তবে , scriptlets (JSP ফাইল, যাদের কাঁচা জাভা কোড <% %>
জিনিষ) একটি বলে মনে করা হয় দরিদ্র অনুশীলন । আমি জেএসটিএল ইনস্টল করার পরামর্শ দিচ্ছি ( জেআর ফাইলটি কেবল ভিতরে ফেলে দিন /WEB-INF/lib
এবং জেএসপির শীর্ষে প্রয়োজনীয় ট্যাগলিবগুলি ঘোষণা করুন )। <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
বা একটি দরকার । এই তালিকা অনুরোধ ভিত্তিক হতে অনুমিত হয়, তাহলে ব্যবহার এর :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
(সন্নিবেশ ক্রম বজায় রাখা)?