JSPのEL式でMapの値を取り出す方法を徹底解説!初心者でもわかる基本構文と使い方
生徒
「JSPのEL式って便利らしいんですが、Mapから値を取り出す方法がよくわかりません…」
先生
「いいところに気づきましたね。JSPのEL式は、MapやListなどのデータを簡潔に取り出すことができる強力な仕組みなんですよ。」
生徒
「具体的にどうやってMapの値をEL式で取り出すんですか?」
先生
「それでは、JSPにおけるEL式とMapの基本的な使い方を一緒に見ていきましょう!」
1. JSPとEL式の基本をおさらいしよう
「1. JSPとEL式の基本をおさらいしよう」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
まず最初に、JSP(JavaServer Pages)とは、Javaを用いてWebアプリケーションを開発する際に使われるテンプレート技術です。HTMLとJavaコードを組み合わせて、動的なWebページを生成することができます。
その中でもEL式(Expression Language)は、JSPの中でオブジェクトのプロパティやコレクション(MapやListなど)にアクセスするための簡潔な記法を提供します。
EL式を使えば、<%= %>のようなスクリプトレットを使わずに、値をJSPに埋め込むことができます。
2. JSPのEL式でMapの値を取り出す基本構文
JSPでMapの値をEL式で取り出すには、以下のような構文を使います。
${map['キー名']}
ここでのmapは、スコープ(request・session・applicationなど)に格納されたMapオブジェクトを指します。
そして、'キー名'には取り出したい要素のキーを文字列で指定します。ダブルクォーテーションでもOKですが、EL式ではシングルクォートの方が一般的です。
3. JSPでMapをEL式で使う実例を見てみよう
以下のようなServletでMapを準備し、requestスコープにセットしたとしましょう。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> userMap = new HashMap<>();
userMap.put("name", "田中太郎");
userMap.put("email", "tanaka@example.com");
request.setAttribute("userInfo", userMap);
request.getRequestDispatcher("/user.jsp").forward(request, response);
}
このとき、JSPファイル(たとえばuser.jsp)では以下のようにEL式でMapの値を取り出すことができます。
<p>名前:${userInfo['name']}</p>
<p>メールアドレス:${userInfo['email']}</p>
出力結果は以下のようになります。
名前:田中太郎
メールアドレス:tanaka@example.com
4. EL式でMapのキーを動的に指定したいときは?
「4. EL式でMapのキーを動的に指定したいときは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
実際の開発現場では、EL式で指定するMapのキーを動的に変えたい場面も出てきます。
たとえば、別の変数にキーが格納されている場合、次のように書くことができます。
<c:set var="keyName" value="email" />
<p>動的キーで取得:${userInfo[keyName]}</p>
このように<c:set>タグで変数を定義し、それをキーとして使うことができます。これはJSTL(JSP Standard Tag Library)との連携によって可能になります。
5. キーに数値や変数を使いたい場合の注意点
Mapのキーに数値や変数を使いたい場合は、EL式の仕様を理解しておく必要があります。以下のような記述が可能です。
<c:set var="userId" value="101" />
${userMap[userId]} もしくは ${userMap['101']}
ただし、Mapのキーが文字列である場合には、数値も文字列として扱う必要があります。EL式では、[]の中に変数を直接指定することで柔軟なアクセスが可能になります。
6. EL式でMapの中にMapがあるときのネストアクセス
EL式は、Mapの中にMapが入っているような入れ子構造でもアクセスできます。たとえば以下のようにMapが二重になっているケースを考えます。
Map<String, Map<String, String>> nestedMap = new HashMap<>();
Map<String, String> innerMap = new HashMap<>();
innerMap.put("address", "東京都港区");
nestedMap.put("user1", innerMap);
request.setAttribute("userData", nestedMap);
この場合、JSPのEL式では以下のように書くことで中の値を取り出せます。
${userData['user1']['address']}
このように、EL式を使えばMapの中のMap、いわゆるネストされた構造でも直感的にアクセスできるのが特徴です。
7. JSPでMapを使うときによくあるエラーと対処法
「7. JSPでMapを使うときによくあるエラーと対処法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
EL式でMapを使うときに、以下のようなエラーや意図しない出力が出ることがあります。
- キーが存在しない場合: EL式は空文字を返します。
nullにはなりません。 - Mapがnullの場合: EL式全体が何も出力されず、エラーにもなりません。
- キーが数値のとき: 文字列で書かないと見つけられないことがあります。
${map['100']}のように明示しましょう。
エラーを防ぐためには、サーバーサイドでMapの初期化やデータチェックを丁寧に行いましょう。また、JSTLの<c:if>や<c:choose>タグを組み合わせて条件分岐を行うのも効果的です。
8. JSTLとの組み合わせでMapの中身をループ表示
JSPではJSTLを使って、Mapの中身をループして表示することもできます。たとえば以下のようなMapがあるとします。
Map<String, String> colors = new HashMap<>();
colors.put("red", "赤");
colors.put("blue", "青");
colors.put("green", "緑");
request.setAttribute("colorMap", colors);
これをJSPで表示するには、次のように<c:forEach>タグを使います。
<c:forEach var="entry" items="${colorMap}">
<p>${entry.key}:${entry.value}</p>
</c:forEach>
このようにすることで、Mapのすべてのキーと値を簡単に一覧表示することができます。