JSTL
JSTL・・・タグライブラリーの一種で、JavaEEに採用されている標準的なタグライブラリ。
JSTLを利用するには、JSTLのJARファイルを入手する必要がある。
ダウンロードは、以下から行う。(impl、spec、jstlel、compactすべてダウンロードする)
Apache Tomcat® - Apache Taglibs Downloads
ダウンロード後は、WEB-INF/libフォルダーに配置する。
TLDファイル
TLDファイル・・・カスタムタグの動作を定義するXML形式のファイル。
JARファイルにTLDファイルが含まれている場合、別途配置する必要はないが、配置する必要がある場合は以下方法がある。
パスを直接指定
TLD(mytag.tldファイル)をWEB-INFフォルダ配下に配置した場合、taglibディレクティブのURIに、TLDのパスを直接指定する。
<%@taglib prefix="mytag" uri="/WEB-INF/mytag.tld"%>
<jsp-config> <taglib> <taglib-uri>myuri</taglib-uri> <taglib-location>/WEB-INF/mytag.tld</taglib-location> </taglib> </jsp-config>
<%@taglib prefix="mytag" uri="myuri" %>
リストの要素を取り出すサンプル
JSTLに含まれるカスタムタグ群は、機能別に分類されている。
タグの分類には、Core(繰り返しなど)、XML(XMLドキュメントの操作)、I18N(国際化機能のサポート)、Database(データベースの操作)、Functions(文字列の加工)がある。
@WebServlet(urlPatterns={"/chapter22/jstl"}) public class JSTL extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter pw = resp.getWriter(); try { // DBから取得 ProductDAO dao = new ProductDAO(); List<Product> list = dao.search(""); // リクエスト属性に設定 req.setAttribute("list", list); // JSPファイルにフォワード req.getRequestDispatcher("jstl.jsp").forward(req, resp); } catch (Exception e) { e.printStackTrace(pw); } } }
<!-- taglibディレクティブ --> <!-- %@taglib prefix="接頭辞" uri="URI" --> <!-- 以下はCoreタグの場合のtaglibディレクティブの記述 --> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- リストの要素を取り出す --> <c:forEach var="p" items="${list }"> ${p.id }:${p.name }:${p.price }<br> </c:forEach>
数値を出力するサンプル
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:forEach var="i" begin="1" end="9"> ${i }<br> </c:forEach>
セレクトボックスを使ったサンプル
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <p>購入数を選択してください。</p> <form action="/book/chapter6/select" method="post"> <select name="count"> <c:forEach var="i" begin="1" end="9"> <option value="${i }">${i }</option> </c:forEach> </select> <p><input type="submit" value="確定"></p> </form>
タグを使ったサンプル
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 抽選結果: <c:if test="${Math.random()<0.5 }"> あたり </c:if>
if-else文に相当するタグを使ったサンプル
条件が成立した場合の処理は
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:forEach var="i" begin="101" end="200"> <c:choose> <!-- iを10で割った余りが1のとき --> <c:when test="${i%10==1}">(${i},</c:when> <!-- iを10で割った余りが0のとき --> <c:when test="${i%10==0}">${i})<br></c:when> <!-- その他の場合 --> <c:otherwise>${i },</c:otherwise> </c:choose> </c:forEach>
その他のCoreタグ
c:setタグ
変数に値を設定するタグ。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:set var="message" value="Hello" /> <p>message:${message }</p> <c:set var="message2">Welcome</c:set> <p>message2 : ${message2 }</p> <c:set var="result" value="${1+2 }"/> <p>result : ${result }</p> <jsp:useBean id="product" class="bean.Product"/> <c:set target="${product }" property="name" value="サンマ"/> <p>product.name : ${product.name }</p> <jsp:useBean id="map" class="java.util.HashMap"/> <c:set target="${map }" property="apple" value="りんご"/> <p>map.apple : ${map.apple }</p>
c:removeタグ
変数を削除するタグ
<c:remove var="変数名"/>
c:forTokensタグ
指定した区切り文字で、文字列を分割し、1つ1つ出力できる。
<c:forTokens items="黒、青、赤、緑、黄、白" delims="、" var="color"> <p>${color}</p> </c:forTokens>
その他に、
c:importタグ
c:redirectタグ
c:urlタグ
c:catchタグ
c:outタグ
などがある。