JSTL <c:forTokens>

<c:forTokens> は文字列を区切り文字で分割して、繰返し処理を行うJSP標準タグライブラリ(JSTL)である。

タグ

<c:forTokens items="" delims="">
  <!-- 繰り返し処理 -->
</c:forTokens>

属性

<c:forTokens> タグには次の属性を指定することができる。

begin

繰返し処理を始める最初のインデックス(0始まり)

<c:forTokens items="a,b,c" delims="," begin="1">
  <!-- 繰り返し処理 -->
</c:forTokens>
delims

文字列を分割する区切りとなる文字を指定する。必須属性であり、省略できない。

<c:forTokens items="a,b,c" delims=",">
  <!-- 繰り返し処理 -->
</c:forTokens>
end

繰返し処理を終える最後のインデックス

<c:forTokens items="a,b,c" delims="," end="1">
  <!-- 繰り返し処理 -->
</c:forTokens>
items

分割する文字列を指定する。必須属性であり、省略できない。

step

繰返し処理ごとに進めるインデックス

<c:forTokens items="a,b,c,d" delims="," step="2">
  <!-- 繰り返し処理 -->
</c:forTokens>
var

区切り文字で分割された文字列を格納する変数

<c:forTokens items="a,b,c" delims="," var="v">
  <c:out value="${v}" />
</c:forTokens>
varStatus

繰返し処理の状態が格納される変数を指定する。変数に格納される状態は、次のプロパティを持つ。

varStatus
プロパティ説明
beginbegin属性の値
count現在のインデックス(1始まり)
current現在のオブジェクト
endend属性の値
firstループの最初の場合はtrue、その他はfalse
index現在のインデックス(0始まり)
lastループの最後の場合はtrue、その他はfalse
stepstep属性の値

varStatusの値は次のように変化する。

<c:forTokens items="a,b,c,d,e" delims="," varStatus="s" step="2" end="4">
  <c:set var="begin" value="${s.begin}" />
  <c:set var="step" value="${s.step}" />
  <c:set var="end" value="${s.end}" />
  <c:set var="index" value="${s.index}" />
  <c:set var="count" value="${s.count}" />
  <c:set var="first" value="${s.first}" />
  <c:set var="last" value="${s.last}" />
</c:forTokens>
varStatusの例
begin step end index count first last
0 2 4 0 1 true false
0 2 4 2 3 false false
0 2 4 4 5 false true

<c:forTokens> タグの使用例を次に示す。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
  <head>
    <title>JSTL example</titile>
  </head>
  <body>
    <c:set var="i" value="foo,bar,baz" />
    <c:forTokens items="${i}" delims="," var="v" varStatus="s">
      <c:out value="${s.index}" />
      <br>
      <c:out value="${v}" />
      <br>
    </c:forTokens>
  </body>
</html>

上記のJSPを実行すると、次に示すHTMLが生成される。

<!DOCTYPE html>
<html>
  <head>
    <title>JSTL example</titile>
  </head>
  <body>
0<br>foo<br>
1<br>bar<br>
2<br>baz<br>
  </body>
</html>

JSTL (JavaServer Pages Standard Tag Library)

JSP標準タグライブラリ(JSTL)には、他にも次のタグがある。