回答:
通常のJavaコードで行うのと同じ方法です。
for (Map.Entry<String, String> entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
ただし、スクリプトレット(JSPファイル内の生のJavaコードなど<% %>
)は不適切なプラクティスと見なされます。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
目的のスコープServletContextListener
に配置するに${countries}
は、またはaです。このリストはリクエストベースであるために仮定されている場合は、使用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
のcontextInitialized()
それは一度だけロードされ、メモリに保持されますように。
public void contextInitialized(ServletContextEvent event) {
Map<String, String> countries = MainUtils.getCountries();
event.getServletContext().setAttribute("countries", countries);
}
どちらの場合も countries
によってELで使用できます${countries}
。
お役に立てれば。
ループ内で何を実行するかに応じて、代わりに次のいずれかを繰り返します。
countries.keySet()
countries.entrySet()
countries.values()
以下のコードは私のために働きます
まずpartnerTypesMap
、サーバーサイドで以下のように定義しました、
Map<String, String> partnerTypes = new HashMap<>();
値を追加した後、オブジェクトをに追加しましたmodel
。
model.addAttribute("partnerTypesMap", partnerTypes);
ページをレンダリングするとき、以下を使用foreach
して1つずつ印刷します。
<c:forEach items="${partnerTypesMap}" var="partnerTypesMap">
<form:option value="${partnerTypesMap['value']}">${partnerTypesMap['key']}</form:option>
</c:forEach>
HashMap
は本来、順序付けされていません。TreeMap
(キーによるオートソート)またはLinkedHashMap
(挿入順序を維持する)が必要ないことを確信していますか?