Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Servlet・JSP > JSP −14.カスタムタグ(tldファイルの作成)
更新日:2006/10/8
JSP−14.カスタムタグ(tldファイルの作成)
tldファイルはカスタムタグの動作を定義するXML形式のファイルです。ここでは、tldファイルの作成方法について解説します。
XMLの定義方法
JSP2.0からXMLの定義方法がDTDからXMLスキーマに変わりました。DTDも使えますが、JSP2.0の新機能を使用するためにはXMLスキーマを使用する必要があります。
XMLスキーマを使用する場合は、tldファイルに以下の記述を記載します。
<?xml version="1.0" ?>

<!-- XMLスキーマの定義を記載 -->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            web-jsptaglibrary_2_0.xsd"
        version="2.0">

-------カスタムタグの定義-------
-------カスタムタグの定義-------

</taglib>
DTDを使用する場合は、tldファイルに以下の記述を記載します。
<?xml version="1.0" ?>

<!-- DTDの定義を記載 -->
<!DOCTYPE taglib PUBLIC
          "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
          "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

-------カスタムタグの定義-------
-------カスタムタグの定義-------

</taglib>
タグ要素
tldファイルで定義できる主なタグ要素について解説します。すべてのタグ要素についてはJSP2.1の仕様書を参照してください。JSP2.1の仕様書(JavaServer Pages 仕様)は以下のURLからダウンロードできます。

URL:http://jcp.org/aboutJava/communityprocess/final/jsr245/index.html
<taglib>タグ
<taglib>タグはtldファイルで定義する最上位のタグです。タグライブラリのバージョン、JSPのバージョンなどカスタムタグの総体的な情報を定義します。
【<taglib>タグのサブ要素】
要素
内容
要素数
description
カスタムタグの説明を記載します。
0以上
display-name
GUIツールで表示されるカスタムタグの名前を記載します。
0以上
icon
GUIツールで表示される画像を指定します。
0以上
small-icon
<icon>タグのサブ要素です。GUIツールで表示される小さなアイコンを指定します。
0か1
large-icon
<icon>タグのサブ要素です。GUIツールで表示される大きなアイコンを指定します。
0か1
tlib-version
カスタムタグのバージョンを指定します。必ず1.0を指定します。
1
short-name
GUIツールで使われるカスタムタグの略称を指定します。カスタムタグのプレフィックス値などに使用されます。
1
uri
JSPプログラムがtldファイルの配置場所を認識するために使用します。JSPプログラムのtaglibディレクティブのuri属性で指定される値を指定します。web.xmlの<taglib-uri>タグ、<taglib-location>タグが指定されている場合はそちらが優先されます。
0か1
listener
カスタムタグのリスナークラスを指定します。サブ要素の詳細はJSP2.0の仕様書を参照してください。
0以上
tag
個々のタグの動作を定義します。詳細は以下で解説します。
0以上
※要素数1は必須項目を表します。
<tag>タグ
<tag>タグは<taglib>タグのサブ要素で、カスタムタグの個々のタグの動作を定義します。タグ名や、タグハンドラクラスのクラス名などを指定します。
【<tag>タグのサブ要素】
要素
内容
要素数
description
タグの説明を記載します。
0以上
display-name
GUIツールで表示されるタグの名前を記載します。
0以上
icon
GUIツールで表示される画像を指定します。
0以上
small-icon
<icon>タグのサブ要素です。GUIツールで表示される小さなアイコンを指定します。
0か1
large-icon
<icon>タグのサブ要素です。GUIツールで表示される大きなアイコンを指定します。
0か1
name
JSPプログラムで使用するタグの名前を指定します。
1
tag-class
カスタムタグの動作を定義したタグハンドラクラスをパッケージ名から指定します。
1
body-content
開始タグと終了タグの間の本体を定義します。
「empty」はタグの本体が空でなければなりません。
「JSP」はタグの本体にJSPが理解できるコードを記述できます。テキスト、HTML、JSPプログラムなどです。本体が空でも許容されます。
「tagdependent」はタグの本体にJSPが理解できないコードを記述できます。記載されたコードはそのままタグハンドラクラスに渡されます。SQL文などがあたります。
1
attribute
タグに指定できる属性を定義します。詳細は以下で解説します。
0以上
example
タグの使用例を記載します。
0か1
※要素数1は必須項目を表します。
<attribute>タグ
<attribute>タグは<tag>タグのサブ要素で、タグの属性を定義します。属性の名前、属性のデータ型などを指定します。
【<attribute>タグのサブ要素】
要素
内容
要素数
description
属性の説明を記載します。
0以上
name
属性の名前を指定します。
1
required
属性が必須かどうかをtrueかfalseで指定します。trueの場合は属性が必須であることを表します。デフォルトはfalseです。
0か1
rtexprvalue
属性値の指定に式が使用できるかどうかをtrueかfalseで指定します。trueの場合は式が使用できることを表します。属性値に<%=xxx %>といった式を指定し、属性値を動的に変更できます。デフォルトはfalseです。
0か1
type
rtexprvalue要素が定義されているときに定義します。属性値に式を指定したときに式から返されるデータのデータ型を指定します。デフォルトや属性値に式を指定しない場合はString型になります。
0か1
※要素数1は必須項目を表します。
使用例
【例1】属性なし、タグの本体を許容しないカスタムタグの定義です。
<?xml version="1.0" ?>

<!-- (1)XMLスキーマの定義を記載 -->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            web-jsptaglibrary_2_0.xsd"
        version="2.0">
  <tlib-version>1.0</tlib-version>

  <!-- (2)JSPのバージョンを指定 -->
  <jsp-version>2.0</jsp-version>
  <short-name>hello</short-name>

  <tag>
    <!-- (3)JSPプログラムで使用するタグ名を指定 -->
    <name>sayHello</name>
    <!-- (4)タグの動作を定義したタグハンドラクラスを指定 -->
    tag-class>tags.helloTag</tag-class>
    <!-- (5)タグの本体は空を指定 -->
    <body-content>empty</body-content>
  </tag>
</taglib>
<%@ page contentType="text/html; charset=windows-31j" 
         import="tags.*" %>
<%@ taglib uri="http://www.javaroad.jp/tags/hello" 
           prefix="hello" %>

  ---------------------
  ---------------------

<%-- (1)カスタムタグを使用します。タグのプレフィックスに
        taglibディレクティブで指定した値を使用します。タ
        グ名にはtldファイルの<name>タグで指定した値を使
        用します。<body-content>タグでemptyを指定してい
        るため、タグの本体は記載しません。 --%>
<hello:sayHello />

  ---------------------
  ---------------------

【例2】属性あり、タグの本体にコードの記載を許容するカスタムタグの定義です。
<?xml version="1.0" ?>

<!-- (1)XMLスキーマの定義を記載 -->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            web-jsptaglibrary_2_0.xsd"
        version="2.0">

  <tlib-version>1.0</tlib-version>
  <!-- (2)JSPのバージョンを指定 -->
  <jsp-version>2.0</jsp-version>
  <short-name>helloFirst</short-name>
  <tag>
    <!-- (3)JSPプログラムで使用するタグ名を指定 -->
    <name>sayHelloFirst</name>
    <!-- (4)タグの動作を定義したタグハンドラクラスを指定 -->
    <tag-class>tags.helloFirstTag</tag-class>
    <!-- (5)タグの本体にJSPが理解できるコードの記載を許容 -->
    <body-content>JSP</body-content>
    <!-- (6)属性の名前がcount、必須の属性で、
            属性値に式が許容できる属性を宣言 -->
    <attribute>
      <name>count</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>
<%@ page contentType="text/html; charset=windows-31j"
         import="tags.*" %>
<%@ taglib uri="http://www.javaroad.jp/tags/helloFirst" 
           prefix="hello2" %>

  ---------------------
  ---------------------

<%-- (1)カスタムタグの属性としてtldファイルの<attribute>タグ
        で指定したcount属性を使用しています。<body-content>
        タグでJSPを指定し、本体にコードの記載を許容している
        ため、本体にprintlnメソッドを記載しています。 --%>
<hello2:sayHelloFirst count="<%= check %>">
  out.println("Hello World!");
</hello2:sayHelloFirst>

  ---------------------
  ---------------------



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道