LoginSignup
3
3

More than 5 years have passed since last update.

Jspにおけるカスタムタグの作成方法(備忘録)

Posted at

※実際に使ったわけではなく、振返りやすいように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>

  ---------------------
  ---------------------
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3