Section9: タグライブラリを使用したJSPページの構築

カスタムタグ使用時のtablibディレクティブのURI属性指定方法
指定方法
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ファイルは以下の場所に置く必要がある。
  • WEB-INFの配下(サブディレクトリも可)
  • jar内のMETA-INFの配下(サブディレクトリも可)
JSTL Coreライブラリ使用時の例
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSTLのcoreライブラリ
タグ名説明
<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>タグの記法
記法記法の詳細
ボディを使用しない記法<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
ボディを使用する記法 <c:out value="value" [escapeXml="{true|false}"]>
defaultValue
</c:out>
<c:out>タグの属性およびボディ部
属性説明
value出力する値。
defaultvalueがnullのときに出力する値。ボディと同時に使用できない。
escapeXml<, >, &, ', " のエスケープを行うかどうかtrueまたはfalseで指定。デフォルトはtrue。
ボディ部valueがnullのときに出力する値。default属性と同時に使用できない。
<c:set>タグの記法
<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>タグの記法
記法の詳細
<c:remove var="varName" [scope="{page|request|session|application}"]/>
<c:remove>タグの属性
属性説明
var変数名
scope変数を削除するスコープ。省略時は全てのスコープに格納されている変数を削除する。
  • scope属性省略時のデフォルトがpageではない点に注意。
<c:catch>
<c:catch>タグの記法
記法の詳細
<c:catch [var="varName"]>
nested actions
</c:catch>
<c:catch>タグの属性とボディ部
属性説明
var例外オブジェクトを格納する変数。pageスコープに格納される。
ボディ部通常のJSPを記述する。
<c:if>タグの記法
<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: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>タグの記法
記法の詳細
<c:when test="testCondition">
body content
</c:when>
<c:when>タグの属性とボディ部
属性説明
testテストする条件をEL式で指定。
ボディ部条件が真の時に実行するJSPを記述。
<c:otherwise>タグの記法
<c:otherwise>タグの記法
記法の詳細
<c:otherwise>
conditional block
</c:otherwise>
<c:otherwise>タグのボディ部
属性説明
ボディ部全ての<c:when>タグの条件にマッチしなかった場合に実行されるJSPを記述する。
<c:forEach>タグの記法
<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内でこのインデックス番号に位置する要素まで処理を行ったら終了する。
step1回のループで増加するインデックス値。省略時は1。
ボディ部繰り返し処理を行うJSPを記述。
varStatus変数が持つフィールド
フィールド説明
currentvar属性で指定した変数に現在格納されているオブジェクト。
index現在のインデックス値。
count現在のループ回数。begin、end、stepの値に左右されず、1,2,3...と数えられる。
first現在のループが初回ループかどうかをtrueまたはfalseで返す。
last現在のループが最終ループかどうかをturueまたはfalseで返す。
beginbegin属性に設定した値。指定していない場合はnull。
endend属性に指定した値。指定していない場合はnull。
stepstep属性に指定した値。指定していない場合はnull。
<c:forTokens>タグの記法
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インデックス値の終了値。分割した文字列要素のうち、このインデックス番号に位置する要素まで処理を行ったら終了する。
step1回のループで増加するインデックス値。省略時は1。
ボディ部繰り返し処理を行うJSPを記述。
<c:import>タグの記法
<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で取り込む記法の場合に記述する属性。
scopevar属性で指定した変数を格納するスコープ。省略時はpage。
charEncodingインポート先の文字エンコーディング。
varReaderインポート内容を取り込むためのReaderオブジェクトを格納する変数。
ボディ部(Stringで取り込む記法)<c:param>タグを記述することでリクエストパラメータを設定できる。複数記述可能。それ以外を記述するとエラーとなる。
ボディ部(Readerを利用して取り込む記法)Readerオブジェクトを使用して取り込んだ情報を出力する処理を記述する。<c:param>タグは使用不可。
  • varまたはvarReader属性が指定されない場合、取り込んだ内容がタグの位置に表示される。
コンテンツをインクルードする各方法の違い
方法インクルードの種類特徴
includeディレクティブ
<%@ include file=".." %>
静的インクルード
  • 静的なインクルードのため、サーブレットはインクルードできない。
標準アクション
<jsp:include ...>
動的インクルード
  • 動的なインクルードのため、サーブレットもインクルードできる。
  • インクルードできるコンテンツは同一コンテキスト内のもののみ。
  • <jsp:param>タグを使用してリクエストパラメータを送信できる。
JSTL
<c:import ...>
動的インクルード
  • 動的なインクルードのため、サーブレットもインクルードできる。
  • 他コンテキスト内のコンテンツをインクルードできる。
  • URLに絶対パスを指定することで他サイトのコンテンツもインクルードできる。
  • インクルード内容または内容を読み取るReaderを変数に格納し、スクリプト要素や他のタグを使って処理できる。
  • <c:param>タグを使ってリクエストパラメータを送信できる。
  • <c:import>タグは<jsp:include>の欠点を補うために作られたタグであり、基本的に<jsp:include>の上位互換のタグと考えて良い。
  • <c:import>のみincludeではなくimportなので注意。
<c:param>タグの記法
<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>タグの記法
記法記法の詳細
リクエストパラメータを指定しない記法 <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>タグの属性とボディ部
属性説明
valueURL。
context他のコンテキスト配下のURLをエンコードする場合に使用する属性。/コンテキスト名 で指定する。
varエンコード結果を格納する変数名。この属性を指定しないと、タグの位置にエンコードされたURLが表示される。
scope変数を格納するスコープを指定。省略時はpage。
ボディ部<c:param>タグを記述することでリクエストパラメータを設定できる。複数記述可能。
<c:redirect>タグの記法
<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>タグを記述することでリクエストパラメータを設定できる。複数記述可能。
inserted by FC2 system