JavaA2Z

KAB-studio > プログラミング > JavaA2Z > カスタムタグライブラリとは

カスタムタグライブラリ

日本語 自作付箋辞書
英語 custom tag library
ふりがな かすたむたぐらいぶらり
フリガナ カスタムタグライブラリ

解説

自分で新たに作成したタグライブラリ
もしくは、既存のタグライブラリを拡張したタグライブラリ
 
タグライブラリには、JSTLやStrutsタグライブラリ等が存在するが、これらでは満足できない場合、もしくは特別な処理をJSPう必要があるが、スクリプトレットとして記述したくない場合には、新たにタグライブラリを作成することになる。
これを「カスタムタグライブラリ」という。
 
カスタムタグライブラリは、クラスtldファイルによって構成される。
 
クラスは、TagSupportクラスもしくはBodyTagSupportクラスサブクラスとして作成する。
挟まない形式のタグ<aaa:bbb />)の場合にはTagSupportクラスを、挟む形式のタグ<aaa:bbb>CCC</aaa:bbb>)の場合にはBodyTagSupportクラスサブクラスとする。
それぞれの適切なメソッドオーバーライドすることで、JSPで処理する際にメソッドが呼ばれるため、その中で処理をう。
 
tldファイルは「TLD」というXMLファイルである。
このファイルタグライブラリに含まれるタグの名称、及びその属性等を記述する。
 
タグライブラリJSPで使用する際は「<%@ taglibJSPディレクティブで使用するタグライブラリを指定する。
uri属性tldファイルを指定し、prefix属性タグライブラリの「苗字」を指定することで、<苗字:カスタムタグ>の形式で使用することができる。
 
カスタムタグライブラリは通常のJavaプログラムと同じのため、JSP内での処理をここで記述することで、スクリプトレット等を使用せずにJavaプログラムを実することができる。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

<%-- webapps/sample-servlet/sample.jsp --%>
<%-- http://localhost:8080/sample-servlet/sample.jsp でアクセスできます。 --%>
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>
<%--
    pageEncodingには、このファイルを保存した時の文字コードを指定してください。 
    Windowsであれば"Windows-31J"を指定すればいいでしょう。
--%>

<%@ taglib uri="/WEB-INF/lib/taglib.tld" prefix="sample_taglib" %>
<!--
    これがタグライブラリを使うためのJSPディレクティブです。
    uriで、タグライブラリを定義するXMLファイルtaglib.tldを相対パスで指定します。
    prefixで、タグライブラリの「苗字」を付けます。
-->

<html>
<head>
<title>JSPのサンプル</title>
</head>
<body>

<!-- タグライブラリを使用します。 -->
<!-- ↓%@ taglibのprefixで指定した名前。 -->
<!-- ↓                    ↓name属性。この値がSampleTagクラスのnameフィールドにセットされます。 -->
<sample_taglib:sample_tag name="AAA">かきくけこ</sample_taglib:sample_tag>
<!--            ↑                    ↑タグで囲まれた文字列。SampleTagクラス内で、getBodyContent().getString()で取得できます。-->
<!--            ↑taglib.tldのtaglib/tag/nameで指定したタグライブラリ名 -->

</body>
</html>



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC
    "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<!-- webapps/sample-servlet/WEB-INF/lib/taglib.tld -->
<!-- カスタムタグライブラリを定義するXMLファイルです。 -->
<taglib>
    <tlib-version>1.0</tlib-version><!-- このファイルのバージョン。 -->
    <jsp-version>1.2</jsp-version><!-- JSPのバージョン。 -->
    <short-name>sample-servlet</short-name><!-- このタグライブラリの名称。 -->
    <description>sample-servletタグライブラリ</description><!-- このタグライブラリの説明。 -->

    <!-- sample_tagカスタムタグを定義します。 -->
    <tag>
        <name>sample_tag</name><!-- タグの名前。 -->
        <tag-class>taglib.SampleTag</tag-class><!-- このタグを処理するクラス。 -->

        <!-- このタグが持つ属性を定義します。 -->
        <attribute>
            <name>name</name><!-- 属性の名前。 -->
            <!-- 
                この属性に渡さされた値が、tag-classで指定したクラスの、
                この名前のフィールドにsetterを通して自動的にセットされます。 
            -->
        </attribute>
    </tag>
</taglib>



// webapps/sample-servlet/WEB-INF/src/taglib/SampleTag.java
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
package taglib;

import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
*   カスタムタグとなるクラスです。
*    <sample_taglib:sample_tag name="名前">あいうえお</sample_taglib:sample_tag>
*/
public class SampleTag extends BodyTagSupport 
{
    /**
     * name属性が格納されるフィールド(プロパティ)。
     */
    protected String name = null;

    // getter
    public String getName()
    {
        return this.name;
    }

    // setter
    public void setName( String name )
    {
        this.name = name;
    }

    /**
    *   タグを処理する時に呼ばれるメソッドです。
    *   BodyTagSupportクラスのメソッドです。
    */
    public int doAfterBody() throws JspException
    {
        try
        {
            // 出力用JspWriterクラスを取得します。
            JspWriter out = getPreviousOut();
            
            // タグで囲まれている文字列を取得します。
            BodyContent bodyContent = getBodyContent();
            String bodyText = bodyContent.getString();
            // その文字列を「」で囲んで出力します。
            out.print( "「" + bodyText + "」" ); 

            // name属性の文字列を()で囲んで出力します。
            out.print( "(" + name + ")" ); 

            // BodyContentが持っている、getString()メソッドで取得できる文字列を
            // 削除します。
            bodyContent.clearBody();

            // 処理を完了します。
            return SKIP_BODY; 
        }
        catch( IOException e )
        {
            // 出力時に例外が発生しました。
            e.printStackTrace();
            throw new JspException( e.getMessage() );
        }
    }
}
<%-- webapps/sample-servlet/sample.jsp --%>
<%-- http://localhost:8080/sample-servlet/sample.jsp でアクセスできます。 --%>
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>
<%--
    pageEncodingには、このファイルを保存した時の文字コードを指定してください。 
    Windowsであれば"Windows-31J"を指定すればいいでしょう。
--%>

<%@ taglib uri="/WEB-INF/lib/taglib.tld" prefix="sample_taglib" %>
<!--
    これがタグライブラリを使うためのJSPディレクティブです。
    uriで、タグライブラリを定義するXMLファイルtaglib.tldを相対パスで指定します。
    prefixで、タグライブラリの「苗字」を付けます。
-->

<html>
<head>
<title>JSPのサンプル</title>
</head>
<body>

<!-- タグライブラリを使用します。 -->
<!-- ↓%@ taglibのprefixで指定した名前。 -->
<!-- ↓                    ↓name属性。この値がSampleTagクラスのnameフィールドにセットされます。 -->
<sample_taglib:sample_tag name="AAA">かきくけこ</sample_taglib:sample_tag>
<!--            ↑                    ↑タグで囲まれた文字列。SampleTagクラス内で、getBodyContent().getString()で取得できます。-->
<!--            ↑taglib.tldのtaglib/tag/nameで指定したタグライブラリ名 -->

</body>
</html>



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC
    "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<!-- webapps/sample-servlet/WEB-INF/lib/taglib.tld -->
<!-- カスタムタグライブラリを定義するXMLファイルです。 -->
<taglib>
    <tlib-version>1.0</tlib-version><!-- このファイルのバージョン。 -->
    <jsp-version>1.2</jsp-version><!-- JSPのバージョン。 -->
    <short-name>sample-servlet</short-name><!-- このタグライブラリの名称。 -->
    <description>sample-servletタグライブラリ</description><!-- このタグライブラリの説明。 -->

    <!-- sample_tagカスタムタグを定義します。 -->
    <tag>
        <name>sample_tag</name><!-- タグの名前。 -->
        <tag-class>taglib.SampleTag</tag-class><!-- このタグを処理するクラス。 -->

        <!-- このタグが持つ属性を定義します。 -->
        <attribute>
            <name>name</name><!-- 属性の名前。 -->
            <!-- 
                この属性に渡さされた値が、tag-classで指定したクラスの、
                この名前のフィールドにsetterを通して自動的にセットされます。 
            -->
        </attribute>
    </tag>
</taglib>



// webapps/sample-servlet/WEB-INF/src/taglib/SampleTag.java
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
package taglib;

import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
*   カスタムタグとなるクラスです。
*    <sample_taglib:sample_tag name="名前">あいうえお</sample_taglib:sample_tag>
*/
public class SampleTag extends BodyTagSupport 
{
    /**
     * name属性が格納されるフィールド(プロパティ)。
     */
    protected String name = null;

    // getter
    public String getName()
    {
        return this.name;
    }

    // setter
    public void setName( String name )
    {
        this.name = name;
    }

    /**
    *   タグを処理する時に呼ばれるメソッドです。
    *   BodyTagSupportクラスのメソッドです。
    */
    public int doAfterBody() throws JspException
    {
        try
        {
            // 出力用JspWriterクラスを取得します。
            JspWriter out = getPreviousOut();
            
            // タグで囲まれている文字列を取得します。
            BodyContent bodyContent = getBodyContent();
            String bodyText = bodyContent.getString();
            // その文字列を「」で囲んで出力します。
            out.print( "「" + bodyText + "」" ); 

            // name属性の文字列を()で囲んで出力します。
            out.print( "(" + name + ")" ); 

            // BodyContentが持っている、getString()メソッドで取得できる文字列を
            // 削除します。
            bodyContent.clearBody();

            // 処理を完了します。
            return SKIP_BODY; 
        }
        catch( IOException e )
        {
            // 出力時に例外が発生しました。
            e.printStackTrace();
            throw new JspException( e.getMessage() );
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/09/14
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。