|
JSP 2.0でサポートされたタグファイルのサンプルです。
以下のファイルは「selflink.tag」と名づけ、$APP_HOME/WEB-INF/tags に配置します。
<%@ attribute name="message" %>
<a href="${pageContext.request.requestURI}">${message}</a>
|
このタグファイルの中で、その主ファイル名が示すselflinkタグは、
messageという属性を持つことを指定しています。
属性の指定を必須にするには、required="true"とします。
タグファイル中では、taglibディレクティブを使って、
別のタグライブラリを参照することは可能です。
pageディレクティブは使えません。
が、代わりにtagディレクティブというものがあって、
pageなにがしと同様に使えます。例えば、
タグファイルの中にスクリプトレットの形でJavaコードを書く場合、
page importの代わりにtag importディレクティブを使えばOKです。
また、タグファイルに日本語でHTMLなどを書くと、そのままでは
(コンテナがTomcat5の場合)???などに化けてしまいます。
page pageEncoding=ならぬtag pageEncoding=で日本語のエンコーディングを指定すればOKです。
<%@ page language="java" contentType="text/html;charset=Shift_JIS" %>
<%@ page pageEncoding="Shift_JIS" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<html>
<head>
<title>JSP 2.0 タグファイルのサンプル</title>
</head>
<body>
<tags:selflink message="もどる" />
</body>
</html>
|
これを使ってみた例です。タグファイルの内容が展開され、
このページ自身のURLへのリンクが表示されます。
呼出元のJSPからタグファイルにデータを動的に渡す方法は幾つかあります。
最も簡単には「タグのパラメータとして渡す」方法です。
より正確にはattribute属性を使うものです。
これは紹介しているWebページも多いので省略するとして…
Servletのrequest、session、applicationスコープに設定された変数はそのままタグファイルでも参照できるのか?
答えは「できます」。
JSP 2.0以降ではタグファイル中でも普通のJSPと同様、単に {$varName} のように書くだけで、
request、session、applicationスコープに設定された変数を参照できます。
ではそれをJSTL Coreのc:ifタグで条件分岐に使うには?
注意が必要なのは、呼出元JSPでtaglibディレクティブで宣言していても、
タグファイルの中でも同じように宣言が必要なことだけです。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:if test="${value == 0}">
<font color="red">該当データが見つかりませんでした。</font><br/>
</c:if>
|
(first uploaded 2003/06/06 last updated 2008/01/29, URANO398)
|