Section9: タグライブラリを使用したJSPページの構築
指定方法 | 例 | |
---|---|---|
taglibディレクティブのuri属性に、tldファイルの場所を直接指定する。 | <%@ taglib uri="/WEB-INF/tld/test.tld" prefix="test" %> | |
web.xmlの<taglib>タグでuriとtldファイルのパスをマッピングし、taglibディレクティブのuri属性にweb.xmlで定義したuriを指定する。 | <%@ taglib uri="http://test/tags/test" prefix="test" %>web.xml <jsp-config> <taglib> <taglib-uri>http://test/tags/test</taglib-uri> <taglib-location>/WEB-INF/tld/test.tld</taglib-location> </taglib> </jsp-config> | |
taglibディレクティブのuri属性に、tldファイルの<uri>タグで指定されたuriを指定する。ただし、この方法を使用する場合、tldファイルは以下の場所に置く必要がある。
|
JSTL Coreライブラリ使用時の例 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> |
タグ名 | 説明 | |
---|---|---|
<c:out> | 文字の出力 | |
<c:set> | 変数に値をセット | |
<c:remove> | 変数の削除 | |
<c:catch> | 例外のキャッチ | |
<c:if> | 条件分岐(2分岐) | |
<c:choose> | 条件分岐(多分岐) | |
<c:when> | <c:choose>タグの子タグとして使用。 | |
<c:otherwise> | <c:choose>タグの子タグとして使用。 | |
<c:forEach> | 繰り返し。 | |
<c:forTokens> | 文字列の繰り返し。 | |
<c:import> | コンテツの動的インクルード。 | |
<c:url> | URLのエンコード | |
<c:redirect> | リダイレクト。 | |
<c:param> | <c:import>、<c:redirect>、<c:url> の子タグとして使用される。パラメータの設定。 |
<c:out>タグの記法
記法 | 記法の詳細 | |
---|---|---|
ボディを使用しない記法 | <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] /> | |
ボディを使用する記法 | <c:out value="value" [escapeXml="{true|false}"]> defaultValue </c:out> |
<c:out>タグの属性およびボディ部
属性 | 説明 | |
---|---|---|
value | 出力する値。 | |
default | valueがnullのときに出力する値。ボディと同時に使用できない。 | |
escapeXml | <, >, &, ', " のエスケープを行うかどうかtrueまたはfalseで指定。デフォルトはtrue。 | |
ボディ部 | valueがnullのときに出力する値。default属性と同時に使用できない。 |
<c:set>タグの記法
記法 | 記法の詳細 | |
---|---|---|
属性を使用したスコープ変数への値のセット | <c:set value="value" var="varName" [scope="{page|request|session|application"]/> | |
ボディを使用したスコープ変数への値のセット | <c:set var="varName" [scope="{page|request|session|application"]> value </c:set> | |
属性を使用したオブジェクトへの値のセット | <set value="value" target="target" property="propertyName"/> | |
ボディを使用したオブジェクトへの値のセット | <set target="target" property="propertyName"> value </c:set> |
<c:set>タグの属性およびボディ部
属性 | 説明 | |
---|---|---|
value | セットする値。 | |
var | 変数名。スコープ変数へ値をセットする場合に使用する。 | |
scope | スコープの指定。省略時はpage。 | |
target | 属性をセットするJavaBeanオブジェクト、またはMapをEL式で指定する。var属性とは同時に使用できない。 | |
property | 属性をセットするプロパティ名。 | |
ボディ部 | セットする値。value属性と同時に使用できない。 |
<c:remove>タグの記法
記法の詳細 | |
---|---|
<c:remove var="varName" [scope="{page|request|session|application}"]/> |
<c:remove>タグの属性
属性 | 説明 | |
---|---|---|
var | 変数名 | |
scope | 変数を削除するスコープ。省略時は全てのスコープに格納されている変数を削除する。 |
- scope属性省略時のデフォルトがpageではない点に注意。
<c:catch>タグの記法
記法の詳細 | |
---|---|
<c:catch [var="varName"]> nested actions </c:catch> |
<c:catch>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
var | 例外オブジェクトを格納する変数。pageスコープに格納される。 | |
ボディ部 | 通常のJSPを記述する。 |
<c:if>タグの記法
記法 | 記法の詳細 | |
---|---|---|
条件のテスト結果を変数に格納するための記法 | <c:if test="testCondition" var="varName" [scope=”{page|request|session|application}”]/> | |
条件が真の場合に処理を行うための記法 | <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]> body content </c:if> |
<c:if>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
test | テストする条件をEL式で指定。 | |
var | テスト結果を格納するスコープ変数。ボディ部を使用しない記法の場合は必須。 | |
scope | テスト結果を格納するスコープ。省略時はpage。 | |
ボディ部 | テストが真の時に実行するJSPを記述。 |
<c:choose>タグの記法
記法の詳細 | |
---|---|
<c:choose> <c:when>タグまたは<c:otherwise>タグ </c:choose> |
<c:choose>タグのボディ部の制約
- ボディ部に記述できるのは、スペース、<c:when>タグ、<c:otherwise>タグのいずれか
- 1つ以上の<c:when>タグが必要
- 0または1つの<c:otherwise>タグを記述可能
- 全ての<c:when>タグは<c:otherwise>タグより前に記述する必要がある。
<c:when>タグの記法
記法の詳細 | |
---|---|
<c:when test="testCondition"> body content </c:when> |
<c:when>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
test | テストする条件をEL式で指定。 | |
ボディ部 | 条件が真の時に実行するJSPを記述。 |
<c:otherwise>タグの記法
記法の詳細 | |
---|---|
<c:otherwise> conditional block </c:otherwise> |
<c:otherwise>タグのボディ部
属性 | 説明 | |
---|---|---|
ボディ部 | 全ての<c:when>タグの条件にマッチしなかった場合に実行されるJSPを記述する。 |
<c:forEach>タグの記法
記法 | 記法の詳細 | |
---|---|---|
コレクションを繰り返し処理する記法(拡張for文に相当) | <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forEach> | |
固定回数処理を繰り返す記法(通常のfor文に相当) | <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> body content </c:forEach> |
<c:forEach>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
var |
コレクションの繰り返し処理の場合: コレクションから取り出した要素を格納する変数 固定回数処理の繰り返しの場合: 現在のインデックス値 | |
items | 繰り返し処理を行うコレクションオブジェクト。処理可能なコレクションは、配列、Collection、Iterator、Enumeration、Map、カンマ区切りのString。 | |
varStatus | 繰り返し処理中のステータスを保持する変数名。 | |
begin | インデックス値の初期値。コレクションを繰り返し処理する記法の場合は、items内でこのインデックス番号に位置する要素から処理が始まる。 | |
end | インデックス値の終了値。コレクションを繰り返し処理する記法の場合は、items内でこのインデックス番号に位置する要素まで処理を行ったら終了する。 | |
step | 1回のループで増加するインデックス値。省略時は1。 | |
ボディ部 | 繰り返し処理を行うJSPを記述。 |
フィールド | 説明 | |
---|---|---|
current | var属性で指定した変数に現在格納されているオブジェクト。 | |
index | 現在のインデックス値。 | |
count | 現在のループ回数。begin、end、stepの値に左右されず、1,2,3...と数えられる。 | |
first | 現在のループが初回ループかどうかをtrueまたはfalseで返す。 | |
last | 現在のループが最終ループかどうかをturueまたはfalseで返す。 | |
begin | begin属性に設定した値。指定していない場合はnull。 | |
end | end属性に指定した値。指定していない場合はnull。 | |
step | step属性に指定した値。指定していない場合はnull。 |
c:forTokensタグの記法
記法の詳細 | |
---|---|
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forTokens> |
<c:forTokens>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
var | 文字列取り出した要素を格納する変数。 | |
items | 繰り返し処理を行う文字列。 | |
delims | 文字列を分割するデリミタの指定。 | |
varStatus | 繰り返し処理中のステータスを保持する変数名。 | |
begin | インデックス値の初期値。分割した文字列要素のうち、このインデックス番号に位置する要素から処理が始まる。 | |
end | インデックス値の終了値。分割した文字列要素のうち、このインデックス番号に位置する要素まで処理を行ったら終了する。 | |
step | 1回のループで増加するインデックス値。省略時は1。 | |
ボディ部 | 繰り返し処理を行うJSPを記述。 |
<c:import>タグの記法
記法 | 記法の詳細 | |
---|---|---|
Stringで取り込む記法 | <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]> [<c:param>タグ] </c:import> | |
Readerを利用して取り込む記法 | <c:import url="url" [context="context"] varReader="varReaderName" [charEncoding="charEncoding"]> body content </c:import> |
<c:import>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
url | インポートするリソースのURL。 | |
context | 他のコンテキストにあるリソースをインポートする場合に使用する。/コンテキスト名 で指定する。 | |
var | インポート内容をStringとして保持する変数名。Stringで取り込む記法の場合に記述する属性。 | |
scope | var属性で指定した変数を格納するスコープ。省略時はpage。 | |
charEncoding | インポート先の文字エンコーディング。 | |
varReader | インポート内容を取り込むためのReaderオブジェクトを格納する変数。 | |
ボディ部(Stringで取り込む記法) | <c:param>タグを記述することでリクエストパラメータを設定できる。複数記述可能。それ以外を記述するとエラーとなる。 | |
ボディ部(Readerを利用して取り込む記法) | Readerオブジェクトを使用して取り込んだ情報を出力する処理を記述する。<c:param>タグは使用不可。 |
- varまたはvarReader属性が指定されない場合、取り込んだ内容がタグの位置に表示される。
方法 | インクルードの種類 | 特徴 | |
---|---|---|---|
includeディレクティブ <%@ include file=".." %> | 静的インクルード |
| |
標準アクション <jsp:include ...> | 動的インクルード |
| |
JSTL <c:import ...> | 動的インクルード |
|
- <c:import>タグは<jsp:include>の欠点を補うために作られたタグであり、基本的に<jsp:include>の上位互換のタグと考えて良い。
- <c:import>のみincludeではなくimportなので注意。
<c:param>タグの記法
記法 | 記法の詳細 | |
---|---|---|
属性で値を指定する記法 | <c:param name="name" value="value"/> | |
ボディで値を指定する記法 | <c:param name="name"> parameter value </c:param> |
<c:param>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
name | パラメータの名前 | |
value | パラメータの値 | |
ボディ部 | パラメータの値。value属性と同時には使用できない。 |
<c:url>タグの記法
記法 | 記法の詳細 | |
---|---|---|
リクエストパラメータを指定しない記法 | <c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"]/> | |
リクエストパラメータを指定する記法 | <c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"]> [<c:param>タグ] </c:url> |
<c:url>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
value | URL。 | |
context | 他のコンテキスト配下のURLをエンコードする場合に使用する属性。/コンテキスト名 で指定する。 | |
var | エンコード結果を格納する変数名。この属性を指定しないと、タグの位置にエンコードされたURLが表示される。 | |
scope | 変数を格納するスコープを指定。省略時はpage。 | |
ボディ部 | <c:param>タグを記述することでリクエストパラメータを設定できる。複数記述可能。 |
<c:redirect>タグの記法
記法 | 記法の詳細 | |
---|---|---|
リクエストパラメータを指定しない記法 | <c:redirect url="value" [context="context"]/> | |
リクエストパラメータを指定する記法 | <c:redirect url="value" [context="context"]/> [<c:param>タグ] </c:redirect> |
<c:redirect>タグの属性とボディ部
属性 | 説明 | |
---|---|---|
url | リダイレクト先URL | |
context | 他のコンテキスト配下のURLへリダイレクトする場合に使用する属性。/コンテキスト名 で指定する。 | |
ボディ部 | <c:param>タグを記述することでリクエストパラメータを設定できる。複数記述可能。 |