トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

JSPの実際:タグファイル

タグファイル

 カスタムタグとタグファイル

  • JSP2.0以前は、独自のタグを作成するために、カスタムタグという仕組みが要されていたが、タグハンドラー以外にタグライブラリディスクリプタ(TLDファイル)を用意する必要があるなど、実装のための敷居が高かった。そのため、JSPプログラマの多くはカスタムタグの実装ではなく、JSTLなどのタグライブラリを用いることが多かったと思われる。
  • JSP2.0で独自のタグを作成するためにタグファイルを用いることができるようになった。これは一般的なJSPやHTMLと同じ書式で書かれたタグファイルを、独自のタグで呼び出すことが可能な仕組みである。
  • この授業ではカスタムタグには触れず、タグファイルを用いた独自タグの作成に関する基本について解説する。

 タグファイルの配置場所と拡張子

  • タグファイルはWEB-INF/tagsフォルダ以下に配置することになっている。
  • JSPファイルの拡張子が.jspなのに対して、タグファイルの拡張子は.tagである。

 タグファイルの設定:tagディレクティブ

  • タグファイルに関する設定を行うためのディレクティブである。

日本語用の設定

  • 日本語を扱う場合には以下のtagディレクティブを一行目に入れておき、pageEncoding属性に文字コードを設定することになる
<%@tag pageEncoding="utf-8"%>
    • ここでは文字コードとしてユニコード(UTF-8)を指定している

import属性

  • JSPのデフォルトで定義されているオブジェクト以外のクラスを利用する場合、JSPと同様にimportを設定する必要がある
  • クラスライブラリ中のjava.util.Dateを利用する場合には以下のように設定すれば、そのタグファイル内ではクラス名のみ(この場合にはDateのみ)で参照することができる
<%@ tag import="java.util.Date" %>

 値の受け渡しのないタグファイル

HelloWorld

  • hello.tag
1
Hello, World!
  • helloTag.jsp
1
2
3
4
5
6
7
8
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="custum" tagdir="/WEB-INF/tags" %>
<html>
<body>
    以下はcustum:helloタグで表示したものです。<br/>
    <custum:hello />    
</body>
</html>

現在時刻を表示するタグファイル

  • now.tag
1
2
3
<%@ tag language="java" pageEncoding="UTF-8"%>
<jsp:useBean id="now" class="java.util.Date" />
${now}
  • nowTag.jsp
1
2
3
4
5
6
7
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="custum" tagdir="/WEB-INF/tags" %>
<html>
<body>
<custum:now />
</body>
</html>

 属性の受け取り:attributeディレクティブ

  • タグファイルにattributeディレクティブを記述することで、タグに指定された属性の値を受け取ることができる。

attributeディレクティブで取得可能な値:属性の名前、種類、必須か

  • 種類(type)が指定されていない場合には文字列(String)型で受け取られる

サンプル

  • half.tag
1
2
<%@ attribute name="value" required="true"%>
${value/2}
  • halfTag.jsp
1
2
3
4
5
6
7
8
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="custum" tagdir="/WEB-INF/tags" %>
<html>
<body>
    以下はcustum:halfタグで表示したものです。<br/>
    <custum:half value="165347" />    
</body>
</html>

 タグに囲われた部分(ボディ部)の参照

  • タグファイルを呼び出す側のタグ内で囲われた部分、つまり<カスタムタグ>〜</カスタムタグ>の"〜"の部分をタグファイル中から参照する場合、<jsp:doBody>タグで参照することができる。

サンプル

  • char.tag
1
<font color="white" style="background-color: red"><jsp:doBody /></font>
  • charTag.jsp
1
2
3
4
5
6
7
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="custum" tagdir="/WEB-INF/tags" %>
<html>
<body>
    <custum:char>認めたくないものだな、自分自身の若さ故の過ちと言うものを。</custum:char>
</body>
</html>

 参考


 課題

  1. 現在時刻を表示するタグファイルを日本語で「○○○○年○○月○○日○○時○○分○○秒」という形式で表示するように変更しなさい。
  2. half.tagを参考に受け取った属性値valueを2倍にして表示するdouble.tagを作成しなさい。

最終更新時間:2009年12月16日 22時05分16秒