JSPのEL式で配列やリストを扱う方法を完全ガイド!インデックスアクセスの書き方も解説
生徒
「JSPで配列やリストの中身を取り出すにはどうすればいいですか?」
先生
「JSPではEL式という記法を使えば、配列やリストの要素にインデックスを指定して簡単にアクセスできますよ。」
生徒
「具体的にどうやって書けばいいんですか?Javaのリストとか配列は普段使ってるんですけど…」
先生
「それでは、JSPでのEL式を使った配列やリストの扱い方を一つずつ見ていきましょう!」
1. 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式によるアクセス
「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や配列のサイズを確認するには
「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式でのデータアクセスがより分かりやすくなります。
まとめ
JSPのEL式で配列やリストを扱う方法を理解すると、Servletで用意したデータをJSP画面に分かりやすく表示できるようになります。JavaのWebアプリケーションでは、ServletやController側でデータを準備し、そのデータをrequestスコープなどに保存して、JSP側で表示する流れがよく使われます。そこで重要になるのが、JSPのEL式によるデータ参照です。EL式を使うことで、JavaコードをJSPに直接書かずに、配列やListの中身を簡潔に取り出せます。
特に、配列やリストの要素をインデックスで取り出す書き方は、プログラミング初心者が最初に覚えておきたい基本です。JavaではListの要素を取り出すときにgetメソッドを使いますが、JSPのEL式では角括弧を使って直感的にアクセスできます。最初の要素は番号の零番から始まるため、果物リストの一番目を表示したい場合は零番、二番目を表示したい場合は一番、三番目を表示したい場合は二番を指定します。このインデックスの考え方を理解しておくと、JSPで一覧画面や詳細画面を作るときに迷いにくくなります。
また、リストと配列はEL式では似た書き方で扱えるため、Servlet側でListを使っていても、String配列を使っていても、JSP側では同じような感覚で表示できます。これはJSP初心者にとって大きなメリットです。例えば、商品一覧、カテゴリ一覧、ユーザー一覧、色の一覧、果物リストなど、複数のデータを画面に表示する場面では、EL式のインデックスアクセスが役立ちます。ただし、存在しないインデックスを指定した場合は何も表示されないことがあるため、要素数を確認したり、JSTLの条件分岐を組み合わせたりすることも大切です。
すべての要素を表示したい場合は、JSTLの繰り返し処理と組み合わせると便利です。JSPのEL式は値を取り出す役割、JSTLは繰り返しや条件分岐を担当する役割として使い分けると、画面のコードが整理されます。Javaの処理をJSPにたくさん書くのではなく、Servletでデータを準備し、JSPでは表示に集中することで、保守しやすいWebアプリケーションになります。
EL式でリストを表示するときの考え方
JSPでリストを表示する基本は、Servlet側でListを作成し、requestスコープに保存してから、JSP側でEL式を使って参照する流れです。Java側でデータを準備し、JSP側で表示する役割を分けることで、プログラム全体が読みやすくなります。
List<String> fruits = new ArrayList<>();
fruits.add("りんご");
fruits.add("みかん");
fruits.add("バナナ");
request.setAttribute("fruits", fruits);
このように保存したリストは、JSPのEL式で取り出せます。画面側では、Javaの複雑な処理を書かずに、表示したい位置の要素を指定できます。
<p>最初の果物:${fruits[0]}</p>
<p>二番目の果物:${fruits[1]}</p>
<p>三番目の果物:${fruits[2]}</p>
JSTLと組み合わせた一覧表示
リストや配列のすべての要素を順番に表示したい場合は、インデックスを一つずつ書くよりも、JSTLの繰り返し処理を使うほうが実用的です。商品一覧や会員一覧のように件数が変わるデータでは、繰り返し表示がよく使われます。
<c:forEach var="item" items="${fruits}" varStatus="status">
<p>${status.index + 1}番目:${item}</p>
</c:forEach>
この書き方を使うと、リストの件数が増えても減っても、JSP側のHTMLを何度も書き直す必要がありません。JSPのEL式、JSTL、List、配列、インデックスアクセスを合わせて理解することで、JavaのWebアプリ開発でよく使う画面表示の基礎が身につきます。
配列とMapの違いも整理しておこう
JSPのEL式では、Listや配列だけでなくMapにもアクセスできます。ただし、Listや配列は数値のインデックスで値を取り出すのに対して、Mapは文字列のキーを使って値を取り出します。リストや配列は順番で管理するデータ、Mapは名前や項目名などのキーで管理するデータと考えると分かりやすいです。
<p>ユーザー名:${userMap['name']}</p>
JSPで画面を作るときは、データの形に合わせて、List、配列、Mapを正しく使い分けることが大切です。配列やリストなら番号で取り出し、Mapならキーで取り出すという基本を押さえておくと、JSPのEL式でのデータ表示がより理解しやすくなります。
生徒
「JSPのEL式で配列やリストを扱う方法が少し分かってきました。Javaで作ったListをrequestに保存して、JSPではインデックスを指定して取り出すんですね。」
先生
「その通りです。Servlet側でデータを用意して、JSP側ではEL式で表示するという役割分担が大切です。JSPにJavaコードをたくさん書くよりも、表示に集中したほうが読みやすい画面になります。」
生徒
「リストも配列も、JSPでは同じように番号で取り出せるのが便利だと思いました。最初の要素が零番から始まるところは気をつけます。」
先生
「そこは初心者がつまずきやすいポイントです。Javaの配列やListでも最初は零番から始まるので、JSPのEL式でも同じ感覚で考えると理解しやすいですよ。」
生徒
「でも、リストの件数が多いときに、毎回インデックスを指定して書くのは大変そうです。」
先生
「その場合はJSTLの繰り返し処理を使います。JSPのEL式で値を取り出し、JSTLで繰り返し表示することで、一覧画面をきれいに作れます。商品一覧、カテゴリ一覧、会員一覧、検索結果一覧など、実務でもよく使われる考え方です。」
生徒
「存在しない番号を指定した場合は、エラーではなく何も表示されないことがあるんですね。」
先生
「はい。だから、必要に応じてJSTLの条件分岐や長さの確認を組み合わせます。画面に空白が出ると利用者が分かりにくいので、データがあるときだけ表示する工夫も大切です。」
生徒
「Mapはリストや配列とは違って、番号ではなくキーで取り出すんですね。」
先生
「その理解で大丈夫です。Listや配列は順番で管理するデータ、Mapは名前付きのデータを扱うときに使います。JSPのEL式ではどちらも簡潔に参照できますが、取り出し方の違いを覚えておくことが重要です。」
生徒
「JSPのEL式、JSTL、requestスコープ、List、配列、Mapの関係がつながってきました。画面表示の基本としてしっかり覚えておきます。」
先生
「とても良い理解です。JSPで配列やリストを扱えるようになると、JavaのWebアプリケーションで一覧表示や詳細表示を作る力が上がります。まずは、Servletでデータを準備し、JSPでEL式を使って表示する流れを何度も練習してみましょう。」