Omong-omong, a HashMapsecara alami tidak teratur. Apakah Anda yakin tidak perlu TreeMap(mengurutkan menurut kunci) atau LinkedHashMap(mempertahankan urutan penyisipan)?
BalusC
Jawaban:
308
Sama seperti yang Anda lakukan pada kode Java normal.
Namun , scriptlets (kode Java mentah dalam file JSP, <% %>hal - hal itu) dianggap praktik yang buruk . Saya sarankan untuk menginstal JSTL (cukup masukkan file JAR /WEB-INF/libdan nyatakan taglibs yang diperlukan di atas JSP). Ini memiliki <c:forEach>tag yang dapat beralih di antara yang lain Map. Setiap iterasi akan memberi Anda Map.Entrypunggung yang pada gilirannya memiliki getKey()dan getValue()metode.
Anda perlu a Servletatau a ServletContextListeneruntuk menempatkannya ${countries}dalam ruang lingkup yang diinginkan. Jika daftar ini seharusnya berdasarkan permintaan, maka gunakan 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);}
Atau jika daftar ini seharusnya menjadi konstan aplikasi-lebar, kemudian menggunakan ServletContextListener's contextInitialized()sehingga akan dimuat hanya sekali dan disimpan dalam memori:
publicvoid contextInitialized(ServletContextEvent event){Map<String,String> countries =MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);}
Dalam kedua kasus itu countriesakan tersedia di EL oleh ${countries}.
@ Khue: ya, Anda juga bisa menaruh atribut di sesi ini. Saya hanya tidak melihat mengapa Anda ingin menduplikasi data lebar aplikasi selama beberapa sesi.
BalusC
Saya pikir dalam kasus info berbasis sesi. Terima kasih atas penjelasannya.
Khue Vu
Saya yakin jawabannya jelas tetapi - mengapa scriptlets dianggap praktik yang buruk? Dengan tidak adanya JSTL karena mempertahankan aplikasi warisan, ini adalah satu-satunya pilihan saya.
Zibbobz
@Zibbobz: teks "praktik buruk" adalah tautan. Klik itu.
BalusC
1
Bergantung pada apa yang ingin Anda capai dalam loop, beralihlah ke salah satu dari ini:
HashMap
secara alami tidak teratur. Apakah Anda yakin tidak perluTreeMap
(mengurutkan menurut kunci) atauLinkedHashMap
(mempertahankan urutan penyisipan)?Jawaban:
Sama seperti yang Anda lakukan pada kode Java normal.
Namun , scriptlets (kode Java mentah dalam file JSP,
<% %>
hal - hal itu) dianggap praktik yang buruk . Saya sarankan untuk menginstal JSTL (cukup masukkan file JAR/WEB-INF/lib
dan nyatakan taglibs yang diperlukan di atas JSP). Ini memiliki<c:forEach>
tag yang dapat beralih di antara yang lainMap
. Setiap iterasi akan memberi AndaMap.Entry
punggung yang pada gilirannya memilikigetKey()
dangetValue()
metode.Inilah contoh dasar:
Dengan demikian masalah khusus Anda dapat diselesaikan sebagai berikut:
Anda perlu a
Servlet
atau aServletContextListener
untuk menempatkannya${countries}
dalam ruang lingkup yang diinginkan. Jika daftar ini seharusnya berdasarkan permintaan, maka gunakanServlet
'sdoGet()
:Atau jika daftar ini seharusnya menjadi konstan aplikasi-lebar, kemudian menggunakan
ServletContextListener
'scontextInitialized()
sehingga akan dimuat hanya sekali dan disimpan dalam memori:Dalam kedua kasus itu
countries
akan tersedia di EL oleh${countries}
.Semoga ini membantu.
Lihat juga:
sumber
Bergantung pada apa yang ingin Anda capai dalam loop, beralihlah ke salah satu dari ini:
countries.keySet()
countries.entrySet()
countries.values()
sumber
Kode di bawah ini berfungsi untuk saya
pertama saya mendefinisikan
partnerTypesMap
seperti di bawah ini di sisi server,setelah menambahkan nilai, saya menambahkan objek ke
model
,Saat merender halaman yang saya gunakan di bawah ini
foreach
untuk mencetaknya satu per satu.sumber