※実際に使ったわけではなく、振返りやすいようにQiitaに投稿したため、
動作確認はできていません。
概要
tldファイルを用いる
tldファイルはカスタムタグの動作を定義するXML形式のファイルのこと。
- xmlで定義する場合
<?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形式で定義する場合
<?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>
使用例
属性なし、タグの本体を許容しないカスタムタグの定義
- xmlファイル
<?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>
- JSPプログラム例
<%@ 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 />
---------------------
---------------------
属性あり、タグの本体にコードの記載を許容するカスタムタグ
- tldファイル例
<?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>
- JSPプログラム例
<%@ 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>
---------------------
---------------------