Java Sticky Note
java
link
author
|
|
Standard TaglibsによるJSTLの利用
6. core タグ
以上見てきたように,ELでは基本的な演算と,Java
オブジェクトに対するアクセス方法が提供されていま
す.これらの機能は,EL単独ではなくタグライブラ
リとともに使用することになります.プログラミング
に必要な一般的な処理については,coreライブラリが
提供しています.ここでは,ELと組み合わせて使用
する,coreライブラリの使い方について概略を見てい
くことにします.
6.1 変数の設定
変数に値を設定するために通常使用されるのは,
<c:set>タグです.<c:set>タグの基本的な構文を図1に示します.
図1 <c:set> タグの基本的な構文
<c:set var="var" value="value" scope="scope"/>
または
<c:set var="var" scope="scope">body content</c:set>
|
図1では,変数スコープがscopeである変数var
にvalue(またはbody content)を設定します.指定
された変数varがすでに存在していればそれを上書き
し,存在していなければ変数が新たに作成されます.
scopeには,page,request,session,applicationの
いずれかが指定可能で,省略された場合のデフォルト
はpageとなります. valueには,ELが記述可能です.
次の例は,ページスコープの変数textに,文字列 "Hello,
World!" を設定している例です.
<c:set var="text" value="Hello,World!"/>
以下のように記述することも可能です.
<c:set var="text">Hello,World!</c:set>
valueにnullオブジェクトが設定された場合のため
に,デフォルト値を設定する方法も用意されていま
す.その記述例を次に挙げます.
<c:set var="text" value="${message}"default="Hello"/>
上記の場合,messageがnullの場合には,textに
は,"Hello"が設定されます.default属性が設定され
なければ,textにはそのままnullオブジェクトが設定
されます.
変数を削除するために,<c:remove>タグが用意さ
れています.<c:remove var="text">で,変数textが削
除されます.
6.2 出力
出力には,<c:out>タグを使用します.<c:out>タグ
の基本的な構文を図2に示します.
valueには,ELを指定することができます.
valueは,文字列式として処理されます.
使用例を次に示します.
<c:out value="Hello,World!"/>
<c:out>タグは,< > & のような,XMLで特別な意
味を持つ文字をエスケープ処理します.変数textに,
文字列"< テスト>" が設定されている場合,<c:out
value= "${text}"/>のHTML出力は,<テスト>
となります.このためクロスサイトスクリプティング
の問題の回避が容易です.
もし,エスケープせずにそのまま< > & などを出力
したい場合は,escapeXML="false"を属性として設定
します.
<c:out value="${text}" escapeXML="false"/>
<c:out>タグも,<c:set>タグ同様valueにnullが設
定された場合に出力するデフォルト値を指定する
default属性が用意されています.
6.3 反復
反復のためのタグとしては,<c:forEach>が用意さ
れています.<c:forEach>タグの基本的な構文を図3
に示します.
図3 <c:forEach> タグの基本的な構文
<c:forEach var="var" items="collection">
body content
</c:forEach>
または
<c:forEach var="var" begin="begin" end="end">
body content
</c:forEach>
|
items 属性には,配列,Collection,Iterator,
Enumeration,カンマ区切りの文字列などが指定でき
ます.<c:forEach>タグは,これら配列やCollection
の要素を1つずつ取り出し,var属性で指定されたル
ープ変数に設定します.変数varは,ページスコープ
の変数となります.scope属性により,変数varのス
コープを指定することもできます.
ループ回数を数値で指定する場合には,begin,end
属性を使用します.増分を示すstep属性も指定可能
です.begin,end,stepには整数を指定します.ま
た,begin,endと,itemsを同時に使用することも可
能です.
<c:forEach>タグの使用例を次に示します.
<c:forEach var="item" items="${param}">
<c:out value="${item}"/>
</c:forEach>
次は,begin,endを指定した場合の使用例です.
ソース
<c:set var="artist" value="写楽,ピカソ,ゴッホ,モネ"/>
<c:forEach var="name" items="${artist}"
begin="${param.start}" end="${param.end}" step="${param.step}">
<c:out value="${name}"/>
</c:forEach>
|
リクエスト
http://hostname/test.jsp?start=0&end=4&step=2
|
出力結果
paramは,リクエスト引数を示す暗黙オブジェクト
です.start,end,stepはリクエストの引数であり,
文字列ですが,前節で述べたとおり数値に変換され,
指定回数だけループが実行されます.
同様に,文字列をトークンで分け,ループを実行す
るタグとして<c:forTokens> タグもあります.
<c:forTokens>タグの基本的な構文を図4に示します.
図4 <c:forTokens> タグの基本的な構文
<c:forTokens var="var" items="string" delims="delimiters">
body content
</c:forTokens>
|
使用例を次に示します.
ソース
<c:set var="artist" value="写楽:ピカソ:ゴッホ:モネ"/>
<c:forTokens var="name" items="${artist}" delims=":">
<c:out value="${name}"/>
</c:forTokens>
|
出力結果
なお,<c:forTokens>タグでも,begin,end,step
属性を使用することが可能です.
反復処理では、その反復の状態変数を利用することが出来ます。
ループに varStatus属性を設定すると反復の状態変数が使用可能です。
以下では、状態変数をloopとして使用しています。
ソース
<c:forEach var="artist" value="写楽,ピカソ" varStatus="loop"/>
<c:out value="${loop.count} ${name}"/><br;>
</c:forTokens>
|
出力結果
反復の状態変数は、上記例のcountの他に次の値を保持しています。
表 反復の状態変数
変数 | 値 |
index | ループカウンタ (0から開始) |
count | ループ回数 (1から開始) |
first | ループ開始フラグ (初回のループ時のみtrue) |
last | ループ終了フラグ (最後のループ時のみtrue) |
current | カレント状態のオブジェクト (var属性で指定されたオブジェクトと等しい) |
begin | 開始値 (begin属性で指定された値) |
end | 終了値 (end属性で指定された値) |
step | ステップ (step属性で指定された値) |
6.4 条件分岐
条件分岐には,<c:if>と<c:choose>が用意されてい
ます.<c:if>タグの基本的な構文を図5に示します.
図5 <c:if> タグの基本的な構文
<c:if test="test">
body content
</c:if>
|
使用例を次に示します.
<c:if test="${...}">
<c:out value="..."/>
</c:if>
test属性に,条件式を記述し,その条件を満たした
場合,<c:if>タグのボディが実行されます.elseはあ
りませんので,単純な比較による実行のみです.
多重分岐の場合には, <c:choose> を使用します.
<c:choose>の基本的な構文を図6に示します.
図6 <c:choose> の基本的な構文
<c:choose>
<c:when test="test1">
body content1
</c:when>
<c:when test="test2">
body content2
</c:when>
<c:otherwise>
body content3
</c:otherwise>
</c:choose>
|
<c:choose>の中に<c:when>で複数の条件を記述し
ます.このうち最初に満たした<c:when>タグのボデ
ィのみ実行されます.どの条件にも満たさなかった場
合の処理として,<c:otherwise>を記述することがで
きます.
使用例を次に示します.
<c:choose>
<c:when test="${height>= 180}"> ← (1)
<c:set var="status" value="tall"/>
</c:when>
<c:when test="${height>= 160}"> ← (2)
<c:set var="status" value="middle"/>
</c:when>
<c:otherwise>
<c:set var="status" value="low"/>
</c:otherwise>
</c:choose>
上記例で,heightが190の場合,statusには"tall"が
設定されます.上記例では,heightが190の場合,(1)
の条件も(2)の条件も満たしますが,最初に条件を満た
したものしか実行されないため,(2)のボディに記述さ
れた処理は実行されません.
6.5 例外処理
処理中の例外を取得するタグとして,<c:cache>タ
グが用意されています.<c:catch>タグの基本的な構
文を図7に示します.
図7 <c:catch> タグの基本的な構文
<c:catche var="var">
body content
</c:catch>
|
使用例を次に示します.
ソース
<c:set var="x" value="string"/>
<c:catch var="exception">
<c:out value="${10+x}"/>
</c:catch>
<c:out value="${exception}"/>
|
出力結果
javax.servlet.jsp.JspException:値 "${10+x}"の・・・
|
上記例では,算術演算に数値に変換できないオブ
ジェクト"string"を指定したため,例外が発生します.
受け取った例外を<c:out>タグで出力しています.
このドキュメントに関するご意見、ご要望などはまで。
|
|