Javaに関する様々な情報をご紹介します。

4Standard Taglibs:coreタグライブラリ

Javaに関する様々な情報をご紹介します。

Standard Taglibs:coreタグライブラリ

ここでは、Standard Taglibsで定義されている式言語(Express Language)について解説します。JSP2.0からはStandard Taglibsだけでなく、JSPでも式言語が利用できるようになっています。

実行環境
  • ・WindowsXP Home Edition
  • ・J2SDK 1.4.2_04
  • ・Tomcat 5.0.18
  • ・Standard Taglib 1.1.0

coreタグライブラリの一覧

coreタグライブラリで定義されているタグを以下に記載します。

タグ 内容
<c:out> 値を表示する。
<c:set> 変数に値を設定する。
<c:remove> リソース有効利用の観点から、使用しなくなった変数を削除する。
<c:forEach> forループと同様の繰り返し処理を行う。また、配列、コレクションなどのオブジェクトの集合を持つオブジェクトから順番にオブジェクトを処理する繰り返し処理を行う。
<c:forTokens> 文字列を、指定された区切り文字(カンマ、タブなど)に従って分け、分けられた文字列を順次処理する。StringTokenizerクラスを同様の処理を行う。
<c:if> if文と同様の条件処理を行う。
<c:choose>
<c:when>br
<c:otherwise>
switch文と同様の条件処理を行う。
<c:catch> 例外が発生した場合、例外をキャッチし、引き続き処理を実行する。
<c:import> 外部のコンテンツ(JSP、HTML、画像など)を該当箇所にインポートする。
<c:url> パラメータをURLエンコードする。
<c:redirect> URLのリダイレクトを行う。
<c:param> <c:import>、<c:url>、<c:redirect>で使用するパラメータを設定する。

coreタグライブラリの使用例

<c:out>

構文1

<c:out value=”値” [escapexml=”{true|false}”] [default=”デフォルト値”] />

構文2

<c:out value=”値” [escapeXml=”{true|false}”]>
   デフォルト値
</c:out>

属性
属性 内容 必須
value 出力する値、変数
default value属性がNullであった場合に表示する値 ×
escapeXml 出力する値に<、>、&、'、"が含まれていた場合に、該当するコード(<、>、&、'、")に置き換えて表示するか、そのまま表示するかを指定する。デフォルトでは、置き換えて表示する(true)。 ×

サンプルコード: value属性に指定されたcustomerオブジェクトの各プロパティを出力しています。各プロパティの値がNullの場合は、default属性で指定されている値が表示されます。

<tr>
    <td><c:out value="${customer.lastName}"/></td>
    <td><c:out value="${customer.phoneHome}"
               default="no home phone specified"/></td>
    <td>
        <c:out value="${customer.phoneCell}" escapeXml="false">
            <font color="red">no cell phone specified</font>
        </c:out>
    </td>
</tr>

<c:set>

構文1

<c:set value=”値” var=”変数名” [scope=”{page|request|session|application}”]/>

構文2

<c:set var=”変数名” [scope=”{page|request|session|application}”]>
  値
</c:set>

構文3

<c:set value=”値” target=”オブジェクト名” property=”プロパティ名”/>

構文4

<c:set target=”オブジェクト名” property=”プロパティ名”>
   値
</c:set>

属性
属性 内容 必須
var 値が設定される変数 ×
value 設定される値 ×
arget プロパティに値を設定する場合に、そのプロパティを持つオブジェクトを指定する。オブジェクトはsetterメソッドを持つJavaBeansオブジェクトか、Mapオブジェクトでなければならない。 ×
property 値が設定されるオブジェクトのプロパティ名 ×
scope var属性のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <FORM>タグなどで送信されたパラメータ”firstName”をparamオブジェクトで取得し、変数firstNameに設定しています。

<c:set var="firstName" value="${param.firstName}" />

サンプルコード2: 変数firstNameをセッションスコープで保存しています。

<c:set var="firstName" value="${firstName}" scope="session" />

サンプルコード3: セッションスコープの変数firstNameを、変数localFirstNameに設定しています。

<c:set var="localFirstName" value="${sessionScope.firstName}" />

サンプルコード4: <c:set>タグで囲まれた範囲の実行結果をvar属性で指定したcustomerTable変数に設定しています。

<c:set var="customerTable" scope="application">
    <table border="1">
        <c:forEach var="customer" items="${customers}">
            <tr>
                <td>${customer.lastName}</td>
                <td>
                    <c:out value="${customer.address}"
                           default="no address specified"/>
                </td>
                <td>
                    <c:out value="${customer.address}">
                        <font color="red">no address specified</font>
                    </c:out>
                </td>
            </tr>
        </c:forEach>
    </table>
</c:set>

<c:remove>

構文1

<c:remove var=”変数名” [scope=”{page|request|session|application}”]/>

属性
属性 内容 必須
var 削除する変数
scope var属性のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: セッションスコープの変数を取得し、何らかの処理を行った後、リソースの有効利用の観点から不要になった変数を削除しています。

<%-- セッションスコープの変数の取得 --%>
<c:set var="handleName" value="${sessionScope.handleName}" />

-----何らかの処理-----

<%-- 不要なセッションスコープの変数を削除 --%>
<c:remove var="handleName" scope="session" />

<c:forEach>

構文1

<c:forEach[var=”変数名”] items=”オブジェクト名” [varStatus=”ステータス変数名”]
[begin=”開始値”] [end=”終了値”] [step=”繰返し処理レベル”]>
   繰返し実行される処理
</c:forEach>

構文2

<c:forEach [var=”変数名”] [varStatus=”ステータス変数名”] begin=”開始値” end=”終了値” [step=”繰返し処理レベル”]>
   繰返し実行される処理
</c:forEach>

属性
属性 内容 必須
items 配列、Mapなどオブジェクトの集合を持つオブジェクトを指定する。 ×
begin items属性が指定されている場合に、どのオブジェクトから繰り返し処理を始めるか指定する。items属性が指定されていない場合は、指定された値から繰り返し処理を開始する。 ×
end items属性が指定されている場合に、どのオブジェクトで繰り返し処理を終了するか指定する。items属性が指定されていない場合は、指定された値で繰り返し処理を終了する。 ×
step 繰り返し処理の繰り返すレベルを指定する。 ×
var 繰り返し処理される値が代入される変数。 ×
varStatus 繰り返し処理のステータスが代入される変数。ステータスにはindex(0から始まるループ回数)、count(1から始まるループ回数)、current(カレントのオブジェクト)、first(ループ開始フラグかどうか)、last(ループ終了フラグかどうか)、begin(begin属性で指定された値)、end(end属性で指定された値)、step(step属性で指定された値)があります。 ×

サンプルコード: 1から10までの値を順番に変数iに代入し、表示しています。

<c:forEach var="i" begin="1" end="10">
    ${i} ・
</c:forEach>

サンプルコード2: items属性で指定されたcumtomersオブジェクトを繰り返し処理している間のステータスの値を表示しています。

<c:forEach var="customer"
        items="${customers}" varStatus="status">
    <tr>
        <td><c:out value="${status.index}"/></td>
        <td><c:out value="${status.count}"/></td>
        <td><c:out value="${status.current.lastName}"/></td>
        <td><c:out value="${status.current.firstName}"/></td>
        <td><c:out value="${status.first}"/></td>
        <td><c:out value="${status.last}"/></td>
    </tr>

    <c:if test="${status.last}">
        <c:set var="count" value="${status.count}"/>
    </c:if>
</c:forEach>

<c:forTokens>

構文1

<c:forTokens items="文字列" delims="セパレータ" [var="変数名"] [varstatus="ステータス変数名" [begin="開始値" [end="終了値" [step="繰返し処理レベル">
   繰返し実行される処理
</c:forTokens>

属性
属性 内容 必須
items 繰り返し処理する文字列を指定する。
delims items属性で指定された文字列を分けるセパレータ(カンマ、タグなど)を指定する。
begin 繰り返し処理を開始するindexを指定する。 ×
end 繰り返し処理を終了するindexを指定する。 ×
step 繰り返し処理の繰り返すレベルを指定する。 ×
var 繰り返し処理される値が代入される変数。 ×
varStatus 繰り返し処理のステータスが代入される変数。ステータスにはindex(0から始まるループ回数)、count(1から始まるループ回数)、current(カレントのオブジェクト)、first(ループ開始フラグかどうか)、last(ループ終了フラグかどうか)、begin(begin属性で指定された値)、end(end属性で指定された値)、step(step属性で指定された値)があります。 ×

サンプルコード: items属性でしてされた文字列を、delims属性のセパレータに従い区分けし、その値を表示しています。

<c:forTokens var="i" items="one,two,three,four,five"
        delims="," begin="3" end="1"
        varStatus="status">

    index: ${status.index} ・
    count: ${status.count} ・
    item: ${i}

</c:forTokens>

<c:if>

構文1

<c:if test=”判定式” var=”変数名” [scope=”{page|request|session|application}”]/>

構文2

<c:if test=”判定式” [var=”変数名”] [scope=”{page|request|session|application}”]>
   判定式がtrueの場合に実行される処理
</c:if>

属性
属性 内容 必須
test if文の処理を実行するかどうかを判定するtrue、falseを返す変数、式を指定する。
var test属性で実行された結果の値(true、false)を代入する変数。 ×
scope var属性のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: customerオブジェクトが持つ、addressオブジェクトのcoountryプロパティの値がUSAの場合にcustomerオブジェクトを表示しています。

<c:if test="${customer.address.country == 'USA'}">
    ${customer}<br>
</c:if>

<c:choose>、<c:when>、<c:otherwise>

構文1

<c:choose>
   <c:when test=”判定式”>
     判定式がtrueの場合に実行される処理
   </c:when>
   ・・・・・・・・・・・・・・・・・・・・・・
   ・・・・・・・・・・・・・・・・・・・・・・
   <c:otherwise>
     どのwhenの判定式もtrueでなかった場合に実行される処理
   </c:otherwise>
</c:choose>

属性
属性 内容 必須
test when文の処理を実行するかどうかを判定するtrue、falseを返す変数、式を指定する。

サンプルコード: customerオブジェクトが持つ、addressオブジェクトのcoountryプロパティの値に従って、font colorを変える処理です。すべてのの判定式でtrueが返されなかった場合はが実行されます。

<c:choose>
    <c:when test="${customer.address.country == 'USA'}">
        <font color="blue">
    </c:when>
    <c:when test="${customer.address.country == 'Canada'}">
        <font color="red">
    </c:when>
    <c:otherwise>
        <font color="green">
    </c:otherwise>
</c:choose>

<c:catch>

構文1

<c:catch [var=”変数名”]>
  例外が発生する可能性のある処理
</c:catch>

属性
属性 内容 必須
var 発生した例外が代入される変数 ×

<c:import>

構文1

<c:import url=”インポートするコンテンツのURL” [context=”コンテキストのURL”] [var=”変数名”] [scope=”{page|request|session|application}”] [charEncoding=”エンコード方式”]>
   インポートされるコンテンツに関する処理
   <c:param>タグの処理
</c:import>

構文2

<c:import url=”インポートするコンテンツのURL” [context=”コンテキストのURL”] varReader=”Reader型の変数名” [charEncoding=”エンコード方式”]>
   Reader型の変数に関する処理
</c:import>

属性
属性 内容 必須
url インポートする外部コンテンツのURL。絶対URLでも相対URLでも指定可能。
var インポートした外部コンテンツが代入される変数。 ×
scope var属性のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×
varReader インポートした外部コンテンツが代入される変数。代入された変数を他のアプリケーションから読み込めるように変数の型はReader型になる。動画、音声など特殊なデコード処理が必要な外部コンテンツを表示するときに使用する。 ×
context 外部コンテンツのURLに属するコンテキストを指定する。 ×
charEncoding インポートする外部コンテンツのエンコード方式を指定する。 ×

サンプルコード: url属性で指定した外部コンテンツをvar属性で指定した変数に代入しています。

<c:import var="cnn" url="http://www.cnn.com/cnn.rss"/>

<c:url>

構文1

<c:url value=”URLエンコードされるURL” [context=”コンテキストのURL”] [var=”変数名”] [scope=”{page|request|session|application}”]/>

構文2

<c:url value=”URLエンコードされるURL” [context=”コンテキストのURL”] [var=”変数名”] [scope=”{page|request|session|application}”]>
   <c:param>タグの処理
</c:url>

属性
属性 内容 必須
var URLエンコードされた値が代入される変数。 ×
scope var属性のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×
value URLエンコードされるURLを指定する。 ×
context URLに属するコンテキストを指定する。 ×

サンプルコード: value属性で指定したURLと<param>タグで指定した値でURLエンコーディングを行います。URLエンコーディングされた値は「base?param=ABC」になります。

<tr>
    <td>"base", param=ABC</td>
    <td>
        <c:url value="base">
            <c:param name="param" value="ABC"/>
        </c:url>
    </td>
</tr>

<c:redirect>

構文1

<c:redirect url=”リダイレクト先のURL” [context=”コンテキストのURL”]/>

構文2

<c:redirect url=”リダイレクト先のURL” [context=”コンテキストのURL”]/>
   <c:param>タグの処理
</c:redirect>

属性
属性 内容 必須
url リダイレクト先のURLを指定する。 ×
context URLに属するコンテキストを指定する。 ×

<c:param>

構文1

<c:param name=”パラメータ名” value=”パラメータ値”/>

構文2

<c:param name=”パラメータ名”/>
   パラメータ値
</c:param>

属性
属性 内容 必須
name 値を代入するパラメータ名を指定する。
value パラメータ名に代入する値を指定する。 ×

4Standard Taglibs:coreタグライブラリ