JSP SimpleTag

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>

Server Side Java Index Top

(first uploaded 2003/06/06 last updated 2008/01/29, URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル