JSPのEL式で配列やリストを扱う方法を完全ガイド!インデックスアクセスの書き方も解説
生徒
「JSPで配列やリストの中身を取り出すにはどうすればいいですか?」
先生
「JSPではEL式という記法を使えば、配列やリストの要素にインデックスを指定して簡単にアクセスできますよ。」
生徒
「具体的にどうやって書けばいいんですか?Javaのリストとか配列は普段使ってるんですけど…」
先生
「それでは、JSPでのEL式を使った配列やリストの扱い方を一つずつ見ていきましょう!」
1. JSPでEL式を使うと何が便利なのか
JSP(JavaServer Pages)では、Javaのコードをできるだけ避けてHTMLとの分離を保つために、EL式(Expression Language)が用いられます。EL式を使うことで、Javaの配列やList、Mapなどのコレクションを簡潔に参照できます。
特に初心者がつまずきやすいのが、リストや配列から値を取り出す方法です。Javaではgetメソッドやインデックスを使いますが、JSPのEL式ではもっと簡単に書けるのが特徴です。
2. Javaで配列やリストを用意する
まずは、Servlet側でリストや配列を用意して、スコープに保存する方法を確認しておきましょう。
List<String> fruits = new ArrayList<>();
fruits.add("りんご");
fruits.add("みかん");
fruits.add("バナナ");
request.setAttribute("fruits", fruits);
このようにServletでListを生成して、requestスコープに保存しておけば、JSPでEL式を使ってアクセスできます。
3. EL式で配列やリストの要素にアクセスする書き方
EL式では、配列やリストの要素にインデックスを使ってアクセスすることができます。Javaでのlist.get(0)のような書き方に対応するのが、EL式では${fruits[0]}です。
<p>最初の果物:${fruits[0]}</p>
<p>2番目の果物:${fruits[1]}</p>
<p>3番目の果物:${fruits[2]}</p>
このように、配列と同じようなインデックス指定ができるため、JSPでのデータ表示がとても直感的に行えます。
4. 配列を使った場合のEL式によるアクセス
Javaの配列も同様にEL式で扱うことができます。以下はString配列をrequestスコープにセットした例です。
String[] colors = {"赤", "青", "緑"};
request.setAttribute("colors", colors);
JSPでの表示は以下のようになります。
<p>色1:${colors[0]}</p>
<p>色2:${colors[1]}</p>
<p>色3:${colors[2]}</p>
リストでも配列でも同じ記法でアクセスできる点が、EL式のわかりやすい特徴の一つです。
5. JSTLと組み合わせてリストや配列をループ表示する方法
リストや配列のすべての要素を繰り返し表示したい場合には、JSTL(JSP Standard Tag Library)の<c:forEach>タグと組み合わせて使います。
<c:forEach var="item" items="${fruits}" varStatus="status">
<p>${status.index + 1}番目:${item}</p>
</c:forEach>
これにより、ループ処理をわざわざJavaで書かなくても、JSP内でスッキリと表現できます。
6. インデックス指定で注意すべき点
EL式でインデックスを指定する場合、存在しない要素にアクセスしようとするとエラーにはなりませんが、空白として表示されるので注意が必要です。例えば以下のように要素数より大きいインデックスを指定した場合:
<p>4番目の果物:${fruits[3]}</p>
上記のように書いても、エラーにはなりませんが、実際の出力は何も表示されません。nullチェックやサイズチェックが必要な場面では、JSTLの<c:if>を併用すると便利です。
7. Listや配列のサイズを確認するには
リストや配列のサイズを確認したい場合、EL式では直接size()メソッドを使うことはできませんが、JSTLと組み合わせることで対応できます。
<c:if test="${fn:length(fruits) > 0}">
<p>果物リストには要素があります。</p>
</c:if>
このように、JSPでのEL式は基本的にデータ取得に特化し、細かいロジックはJSTLに任せるのが良い設計です。
8. Mapとの違いに注意しよう
EL式ではListや配列のアクセスと似た形でMapにもアクセスできますが、キーを指定する場合は文字列である必要があります。
<p>ユーザー名:${userMap['name']}</p>
リストや配列は数値インデックス、マップは文字列キーと覚えておくと、JSPのEL式でのデータアクセスがより分かりやすくなります。