JSTLのCoreライブラリ c:forEach の使い方についてわかりやすく説明します。JSP/Servlet基礎

本記事にはプロモーションが含まれています。

軽くて安いのに大容量!カフェ作業も捗る!プログラミングに最適なPCをお探しなら【おすすめはこちら

JSTLとは

JSP Standard Tag Library
の略でアクションタグのライブラリのことです。
JARファイルをライブラリとして読み込むことで.jsp ファイルのHTMLの中にJavaプログラムを記述できるようになります。

JSTL を記述するためには以下から2つのJARファイルダウンロードして WEB-INF/lib フォルダ内に配置する必要があります。
https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api/1.2
https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl/1.2

c:forEach

c:forEach は反復構造を表現するためのCoreライブラリです。
Javaプログラムでいうところのfor 文や拡張for文がこれにあたります。
使用場面としてはデータベースからListのかたちで取ってきた複数のデータをjsp上で表示させる場面で多く使われます。

ForEachServlet

  1. package controller;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. /**Servlet implementation class CoreServlet
  11. */
  12. @WebServlet(“/foreach”)
  13. public class ForeachServlet extends HttpServlet {
  14. private static final long serialVersionUID = 1L; /**
  15. @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  16. */
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. // リストの作成
  19. List<String> bango = new ArrayList<>();
  20. bango.add(“いち”);
  21. bango.add(“に”);
  22. bango.add(“さん”);
  23. request.setAttribute(“bango”, bango);
  24. request.getRequestDispatcher("/WEB-INF/view/foreach.jsp").forward(request, response);
  25. }
  26. }

ForEachServlet のコード解説

  1. // リストの作成
  2. List<String> bango = new ArrayList<>();
  3. bango.add(“いち”);
  4. bango.add(“に”);
  5. bango.add(“さん”);

サーブレットにjspで表示させるリストを用意します。

  1. request.setAttribute(“bango”, bango);
  2. request.getRequestDispatcher("/WEB-INF/view/foreach.jsp").forward(request, response);

用意した「bango」というリストをjspで表示できるようにリクエストスコープに格納します。
(“bango”, bango);
第一引数はjspの方で参照するときの文字列情報となります。

第二引数はサーブレット側で用意したList名の「bango」となります。
これでjsp側で 「bango」 というリストを利用できるようになります。

forEach.jsp

  1. <%@ page pageEncoding=”UTF-8″%>
  2. <%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
  3. <%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt” %>
  4. !DOCTYPE宣言
  5. <body>
  6. <h1>番号リスト</h1>
  7. <ul>
  8. <c:forEach items=”${bango}” var=”x”>
  9. <li> <c:out value=”${x}” /> </li>
  10. </c:forEach>
  11. </ul>
  12. </body>
  13. </html>

forEach.jsp のコード解説

  1. <ul>
  2. <c:forEach items=”${bango}” var=”x”>
  3. <li> <c:out value=”${x}” /> </li>
  4. </c:forEach>
  5. </ul>

List の中身をjspでリスト表示させます。
繰り返したい対象は<li>なので<ul>ではなく<li>を c:forEachで囲みます。

  1. <c:forEach items=”${bango}” var=”x”>

c:forEach
items=”${bango}”
items 属性ではリスト「bango」を指定します。

Javaプログラムにおける拡張for文では格納用の変数を用意しましたが c:forEach では
var=”x”
のx変数の中にリストの中身を代入していきます。

${ } の利用場面はサーブレット側でrequest.setAttributeによってリクエストスコープに格納されたものを参照するときに利用します。したがって変数xは ${ } の 中には入れません。
その他 ${ } は変数に格納されているものを後から参照する際に利用します。

  1. <li> <c:out value=”${x}” /> </li>

c:forEach の中身を出力するために c:out を使用します。
ここでは変数に格納された「x」を参照するため ${ } の中にxを格納します。

まとめ

forEach.jsp の c:forEach 構文の
「items」には処理対象の配列やリスト等の名前
「var」には各要素を格納する変数名
を記述します。

c:forEach 構文 を利用することでjspファイルの中でJavaプログラムのfor文を利用することができるようになります。

タイトルとURLをコピーしました