I will be waiting for your knock ever after from today.


Visards, Inc.

Java Sticky Note

java
  ・JSTL
  ・Commons Net
  ・Apache
  ・Tomcat
  ・James
  ・Jetspeed
  ・POI
  ・Jexl
  ・Jelly
  ・Blojsom
  ・eclipse

link
  ・James

author
  ・profile

JSTL  
<< prev | JSTL Index | next >>
Standard TaglibsによるJSTLの利用

mixiチェック

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である変数varvalue(または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に示します.
    図2 <c:out> タグの基本的な構文
    <c:out value="value"/>
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>
    出力結果
    1 写楽
    2 ピカソ
反復の状態変数は、上記例の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>タグで出力しています.



 << prev  ↑ JSTL index  next >>


このドキュメントに関するご意見、ご要望などはまで。


Copyright (C) 2003-2005 Visards, Inc. All Rights Reserved.