JSTLライブラリの手引き

JSTLライブラリのガイド

1. 概要

JavaServer Pagesタグライブラリ(JSTL)は、ループ、条件付き書式などの一般的な操作の実装に使用できるタグのセットです。

このチュートリアルでは、JSTLの設定方法とその多数のタグの使用方法について説明します。

2. セットアップ

JSTL機能を有効にするには、ライブラリをプロジェクトに追加する必要があります。 Mavenプロジェクトの場合、依存関係をpom.xmlファイルに追加します。


    javax.servlet
    jstl
    1.2

ライブラリをプロジェクトに追加したら、最終的な設定として、次のようなtaglibディレクティブを使用して、コアJSTLタグとその他のタグの名前空間ファイルをJSPに追加します。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

次に、5つのカテゴリに大まかにグループ化されたこれらのタグを見ていきます。

3. コアタグ

JSTLコアタグライブラリには、値の出力、変数宣言、例外処理、反復の実行、条件ステートメントの宣言な​​どの基本的な操作を実行するためのタグが含まれています。

コアタグを見てみましょう。

3.1. <c:out>タグ

<c:out>は、変数に含まれる値または暗黙の式の結果を表示するために使用されます。

これには3つの属性があります。value, default, and escapeXML.escapeXML属性は、value属性またはそのエンクロージャーに含まれる生のXMLタグを出力します。

<c:out>タグの例は次のとおりです。

3.2. <c:set>タグ

<c:set>タグは、JSPでスコープ変数を宣言するために使用されます。 変数の名前とその値は、それぞれvar属性とvalue属性で宣言することもできます。

例は次の形式になります。

3.3. <c:remove>タグ

<c:remove>タグは、変数にnullを割り当てるのと同じスコープ変数を削除します。 varおよびscope属性を取り、scopeはすべてのスコープのデフォルト値を持ちます。

以下に、<c:remove>タグの使用例を示します。

3.4. <c:catch>タグ

<c:catch>タグは、エンクロージャー内でスローされた例外をキャッチします。 例外がスローされた場合、その値はこのタグのvar属性に格納されます。

典型的な使用法は次のようになります。


    <% int x = Integer.valueOf("a");%>

そして、例外がスローされるかどうかを確認するために、以下に示すように<c:if>タグを使用します。


    

The exception is : ${exceptionThrown}
There is an exception: ${exceptionThrown.message}

3.5. <c:if>タグ

<c:if>は、test属性がtrueと評価された場合にのみ、囲まれたスクリプトレットを表示または実行する条件付きタグです。 評価の結果は、そのvar属性に格納できます。

3.6. <c:choose><c:when>、および<c:otherwise>タグ

<c:choose>は、switch-likeまたはif-else式の実行に使用される親タグです。 2つのサブタグがあります。 if / else-ifおよびelseをそれぞれ表す<c:when>および<c:otherwise>

<c:when>は、評価される式を保持するtest属性を取ります。 以下に、これらのタグの使用例を示します。



    
        
    
    
        
    
    
        
    

3.7. <c:import>タグ

<c:import>タグは、絶対URLまたは相対URLからのコンテンツのフェッチと公開を処理します。

url属性とvar属性を使用して、URLと、URLからフェッチされたコンテンツをそれぞれ保持できます。 たとえば、次の方法でURLからコンテンツをインポートできます。

3.8. <c:forEach>タグ

<c:forEach>タグは、Javaのfor、while、またはdo-while構文に似ています。 items属性は、繰り返される項目のリストを保持し、beginおよびend属性は、それぞれ開始インデックスと終了インデックスを保持します(ゼロインデックス)。

<c:forEach>タグには、各反復後のインデックス増分のサイズを制御するstep属性もあります。 以下に、使用例を示します。


    Item 

3.9. <c:forTokens>タグ

<c:forTokens>タグは、Stringをトークンに分割し、それらを反復処理するために使用されます。

<c:forEach>タグと同様に、items属性と、次のようにStringの区切り文字である追加のdelim属性があります。


    

3.10. <c:url>および<c:param>タグ

<c:url>タグは、適切なリクエストエンコーディングでURLをフォーマットするのに役立ちます。 フォーマットされたURLはvar属性に保存されます。

<c:url>タグには、URLパラメーターを指定するために使用される<c:param>サブタグもあります。 以下に例を示します。


    
    

3.11. <c:redirect>タグ

<c:redirect>タグは、URL書き換えを実行し、ユーザーをそのurl属性で指定されたページにリダイレクトします。 典型的な使用例は次のようになります。

4. タグのフォーマット

JSTLフォーマットタグライブラリは、テキスト、数値、日付、時刻、およびその他の変数をフォーマットして表示しやすくするための便利な方法を提供します。

JSTLフォーマットタグは、Webサイトの国際化を強化するためにも使用できます。

これらのフォーマットタグを使用する前に、taglibをJSPに追加する必要があります。

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

さまざまなフォーマットタグとその使用方法を確認しましょう。

4.1. <fmt:formatDate>タグ

<fmt:formatDate>タグは、日付または時刻のフォーマットに役立ちます。 value属性はフォーマットされる日付を保持し、type属性は3つの値のいずれかを取ります。 date, time or both

<fmt:formatDate>にはpattern属性もあり、ここで目的のフォーマットパターンを指定できます。 以下は、パターンの1つの例です。


4.2. <fmt:parseDate>タグ

<fmt:parseDate>タグは、<fmt:formatDate>タグに似ています。

違いは、<fmt:parseDate>タグを使用すると、基になる日付パーサーが日付値を期待するフォーマットパターンを指定できることです。

日付を解析できます:


4.3. <fmt:formatNumber>タグ

<fmt:formatNumber>タグは、特定のパターンまたは精度で数値のレンダリングを処理します。これは、type属性で指定されたnumber, currency or percentageのいずれかになります。 <fmt:formatNumber>の使用例は次のとおりです。


4.4. <fmt:parseNumber>タグ

<fmt:parseNumber>タグは、<fmt:formatNumber>タグに似ています。 違いは、<fmt:parseNumber>タグを使用すると、基になる数値パーサーが数値を期待するフォーマットパターンを指定できることです。

これは次のように使用できます。

4.5. <fmt:bundle>タグ

<fmt:bundle>タグは、<fmt:message>タグの親タグです。 <fmt:bundle>は、basename属性で指定されたバンドルを、囲まれた<fmt:message>タグに作成します。

<fmt:bundle>タグは、ロケール固有のオブジェクトを指定できるため、国際化を有効にするのに役立ちます。 典型的な使用法は次の形式になります。


    



4.6. <fmt:setBundle>タグ

<fmt:setBundle>タグは、JSP内にリソースバンドルをロードし、ページ全体で利用できるようにするために使用されます。 ロードされたリソースバンドルは、<fmt:setBundle>タグのvar属性に格納されます。 バンドルを設定するには:

4.7. <fmt:setLocale>タグ

<fmt:setLocale>タグは、宣言の後に配置されるJSPのセクションのロケールを設定するために使用されます。 通常、これは次の方法で設定します。

fr_FRは、この場合フランス語であるロケールを表します。

4.8. <fmt:timeZone>タグ

<fmt:timeZone>タグは、エンクロージャー内のタグによるアクションのフォーマットまたは解析で使用されるタイムゾーンを指定する親タグです。

このタイムゾーンパラメータは、そのvalue属性によって提供されます。 使用例を次に示します。


    

4.9. <fmt:setTimeZone>タグ

<fmt:setTimeZone>タグを使用して、value属性で指定されたタイムゾーンをvar属性で指定されたスコープ変数にコピーできます。 これを次のように定義します。

4.10. <fmt:message>タグ

<fmt:message>タグは、国際化メッセージを表示するために使用されます。 取得するメッセージの一意の識別子は、そのkey属性に渡す必要があります。

メッセージを検索するための特定のバンドル。これは、bundle属性を介して指定することもできます。

これは次のようになります。


4.11. <fmt:requestEncoding>タグ

<fmt:requestEncoding>タグは、アクションタイプがpostのフォームのエンコードタイプを指定するのに役立ちます。

使用する文字エンコードの名前は、<fmt:requestEncoding>タグのkey属性を介して提供されます。

以下の例を見てみましょう。

5. XMLタグ

JSTL XMLタグライブラリは、JSP内のXMLデータと対話するための便利な方法を提供します。

これらのXMLタグにアクセスできるようにするには、次の方法でタグライブラリをJSPに追加します。

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

JSTLXMLタグライブラリのさまざまなタグを見てみましょう。

5.1. <x:out>タグ

<x:out>タグはJSPの<%= %>スクリプトレットタグに似ていますが、<x:out>は特にXPath式に使用されます。

<x:out>タグには、select属性とescapeXML属性があり、XPath式を指定してStringを評価し、特殊なXML文字のエスケープを有効にするために使用されます。

簡単な例は:

上記の$outputは、プリロードされたXSLファイルを指します。

5.2. <x:parse>タグ

<x:parse>タグは、そのxmlまたはdoc__属性またはエンクロージャーで指定されたXMLデータを解析するために使用されます。 典型的な例は次のとおりです。

5.3. <x:set>タグ

<x:set>タグは、そのvar属性で指定された変数を、そのselect属性に渡された評価済みXPath式に設定します。 典型的な例は次のとおりです。

5.4. <x:if>タグ

select属性に指定されたXPath式がtrueと評価された場合、<x:if>タグはその本体を処理します。

評価の結果は、そのvar属性に格納できます。

簡単な使用例は次のようになります。


    Document has at least one  element.

5.5. <x:forEach>タグ

<x:forEach>タグは、XMLドキュメント内のノードをループするために使用されます。 XMLドキュメントは、<x:forEach>タグのselect属性を介して提供されます。

<c:forEach>コアタグと同様に、<x:forEach>タグにはbegin, end属性とstep属性があります。

したがって、次のようになります。

  • Item Name:

5.6. <x:choose><x:when>、および<x:otherwise>タグ

<x:choose>タグは、switch-likeまたはif / else-if / else式の実行に使用される親タグであり、属性はありませんが、<x:when>タグと<x:otherwise>タグを囲みます。

<x:when>タグはif / else-ifと同様であり、評価される式を保持するselect属性を取ります。

<x:otherwise>タグはelse / default句に似ており、属性はありません。

以下に、ユースケースの例を示します。


    
        Item category is Sneakers
    
    
        Item category is Heels
    
    
       Unknown category.
    

5.7. <x:transform>および<x:param>タグ

<x:transform>タグは、eXtensible Stylesheet Language(XSL)を適用することにより、JSP内のXMLドキュメントを変換します。

変換されるXMLドキュメントまたはStringdoc属性に提供され、適用されるXSLは<x:transform>タグのxslt属性に渡されます。

<x:param>タグは<x:transform>タグのサブタグであり、変換スタイルシートでパラメーターを設定するために使用されます。

単純な使用例は次の形式になります。



    

6. SQLタグ

JSTL SQL tag library provides tags for performing relational database operations。

JSTL SQLタグを有効にするには、JSPにtaglibを追加します。

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

JSTL SQLタグは、MySQL、Oracle、Microsoft SQL Serverなどのさまざまなデータベースをサポートします。

次に、使用可能なさまざまなSQLタグを確認します。

6.1. <sql:setDataSource>タグ

<sql:setDataSource>タグは、JDBC構成変数を定義するために使用されます。

これらの構成変数は、以下に示すように、<sql:setDataSource>タグのdriver, url, user, passwordおよびdataSource属性に保持されます。

上記では、var属性は、関連付けられたデータベースを識別する値を保持します。

6.2. <sql:query>タグ

<sql:query>タグは、SQL SELECTステートメントを実行するために使用され、その結果は、そのvar属性で定義されたスコープ変数に格納されます。 通常、これを次のように定義します。


    SELECT * from USERS;

<sql:query>タグのsql属性は、実行されるSQLコマンドを保持します。 その他の属性には、maxRowsstartRow、およびdataSource.が含まれます。

6.3. <sql:update>タグ

<sql:update>タグは<sql:query>タグに似ていますが、戻り値を必要としないSQL INSERT、UPDATE、またはDELETE操作のみを実行します。

使用例は次のようになります。


    INSERT INTO USERS(first_name, last_name, email) VALUES
      ('Grace', 'Adams', '[email protected]');

<sql:update>タグのvar属性は、そのsql属性で指定されたSQLステートメントの影響を受けた行の数を保持します。

6.4. <sql:param>タグ

<sql:param>タグは、<sql:query>または<sql:update>タグ内で使用できるサブタグであり、次のようにsqlステートメントの値プレースホルダーに値を指定します。


    DELETE FROM USERS WHERE email = ?
    

<sql:param>タグには単一の属性があります。提供される値を保持するvalue

6.5. <sql:dateParam>タグ

<sql:dateParam>タグは、<sql:query>または<sql:update>タグ内で使用され、SQLステートメントの値プレースホルダーの日付と時刻の値を提供します。

JSPで次のように定義できます。


    UPDATE Users SET registered = ? WHERE email = ?
    
    

<sql:param>タグと同様に、<sql:dateParam>タグにはvalue属性があり、その値はdate, timeまたはtimestamp(日時)。

6.6. <sql:transaction>タグ

<sql:transaction>タグは、次のように<sql:query>タグと<sql:update>タグをグループ化することにより、JDBCトランザクションのような操作を作成するために使用されます。


    
        UPDATE Users SET first_name = 'Patrick-Ellis' WHERE
          email='[email protected]'
    
    
        UPDATE Users SET last_name = 'Nelson' WHERE
          email ='[email protected]'
    
    
        INSERT INTO Users(first_name, last_name, email)
          VALUES ('Grace', 'Adams', '[email protected]');
    

<sql:transaction>タグは、いずれかの操作でエラーが発生した場合に、すべてのデータベース操作が正常に処理される(コミットされる)か、すべてが正常に失敗する(ロールバックされる)ことを保証します。

7. JSTL関数

JSTLメソッドは、JSP内のデータ操作用のユーティリティです。 一部の関数は異なるデータ型を取りますが、それらのほとんどはStringの操作専用です。

JSPでJSTLメソッドを有効にするには、taglibをページに追加します。

<%@ taglib prefix = "fn"
  uri = "http://java.sun.com/jsp/jstl/functions" %>

これらの関数とその使用方法を見てみましょう。

7.1. fn:contains()および fn:containsIgnoreCase()

fn:contains()メソッドは、Stringを評価して、次のような特定の部分文字列が含まれているかどうかを確認します。



    

Found 'first' in string

fn:contains()関数は2つのString引数を取ります。最初の引数はソースStringで、2番目の引数は部分文字列です。 評価の結果に応じてブール値を返します。

fn:containsIgnoreCase()関数は、fn:contains()メソッドの大文字と小文字を区別しないバリアントであり、次のように使用できます。


    

Found 'first' string

Found 'FIRST' string

7.3. fn:endsWith()関数

fn:endsWith()関数は、Stringを評価して、そのサフィックスが別の部分文字列と一致するかどうかを確認します。 2つの引数が必要です。最初の引数はStringであり、その接尾辞はテストされますが、2番目の引数はテストされた接尾辞です。

これは次のように定義できます。


    

String ends with 'string'

7.4. fn:escapeXml()関数

fn:escapeXML()関数は、次のように入力StringのXMLマークアップをエスケープするために使用されます。

${fn:escapeXml(string1)}

7.5. fn:indexOf()関数

fn:indexOf()関数は、Stringを調べて、指定された部分文字列の最初の出現のインデックスを返します。

2つの引数が必要です。最初の引数はソースStringで、2番目の引数は最初に出現したものと一致して返す部分文字列です。

fn:indexOf()関数は整数を返し、次のように使用できます。

Index: ${fn:indexOf(string1, "first")}

7.6. fn:join()関数

fn:join()関数は、配列のすべての要素を単一のStringに連結し、次のように使用できます。


7.7. fn:length()関数

fn:length()関数は、指定されたコレクション内の要素数または指定されたString.内の文字数を返します。

fn:length()関数は、コレクションまたはStringのいずれかである単一のObjectを取り、次のような整数を返します。

Length: ${fn:length(string1)}

7.8. fn:replace()関数

fn:replace()関数は、文字列内のすべての部分文字列を別のString.に置き換えます。

3つの引数が必要です。ソースString,は、ソースで検索する部分文字列であり、Stringは、次のように部分文字列のすべての出現箇所を置き換えます。

7.9. fn:split()関数

fn:split()関数は、指定された区切り文字を使用して、Stringに対して分割操作を実行します。 使用例は次のとおりです。

7.10. fn:startsWith()関数

fn:startsWith()関数は、Stringのプレフィックスをチェックし、次のように指定された部分文字列に一致する場合はtrueを返します。


    

String starts with 'This'

7.11. fn:substring()関数

fn:substring()関数は、指定された開始インデックスと終了インデックスでソースStringから部分文字列を作成します。 次のように使用します。

7.12. fn:substringAfter()関数

fn:substringAfter()関数は、指定された部分文字列のソースStringをチェックし、指定された部分文字列が最初に出現した直後にStringを返します。

次のように使用します。

7.13. fn:substringBefore()関数

fn:substringBefore()関数は、指定された部分文字列のソースStringをチェックし、指定された部分文字列が最初に出現する直前のStringを返します。

JSPページでは、次のようになります。

7.14. fn:toLowerCase()関数

fn:to LowerCase()関数は、String内のすべての文字を小文字に変換し、次のように使用できます。

7.15. fn:toUpperCase()関数

fn:toUpperCase()関数は、Stringのすべての文字を大文字に変換します。

7.16. fn:trim()関数

fn:trim()関数は、String:の前後の空白を削除します

9. 結論

この広範な記事では、さまざまなJSTLタグとその使用方法について説明しました。

いつものように、コードスニペットはover on GitHubにあります。