JSP/自作のタグを作る(JSP2.0編)

JSP/自作のタグを作る(JSP2.0編)

自作のタグを作るのだが以前は馬鹿みたいに手順が多くて仕様考えたやつは死ねばいいとおもってたけど、 最近は結構お手軽に追加できるようになってた。

tagファイルの用意

任意のタグ名.tagというファイルをWEB-INF以下に適当にディレクトリを掘って置く

WEB-INF
  +--tags
      +--hoge.tag

こんな感じ

hello world タグを作る

hoge.tagの中身を書く

tagディレクティブに続き、挿入したいタグを入れる

<%@tag pageEncoding="UTF-8"%>
<p>hello world</p>

タグを使う

使いたいJSPファイル中で名前空間と置き場所を指定してtaglibディレクティブで引き込む

<%@taglib tagdir="/WEB-INF/tags" prefix="aaa"%>

このtagdirはtagsという名前から始まらないといけないらしい

そして名前空間とファイル名にて指定されたタグ名で使う

<aaa:hoge />

tagファイル中で別のtaglibを使う

<%@tag pageEncoding="UTF-8"%>
<c:set var="bbb">びー</c:set>
<p>hello world</p>
<p>${bbb}</p>

こうやってもだめだ。 エラーにはならないのだがc:setのタグを理解できなくてびーがそのまま出力される。

びー
hello world

そこでtaglibディレクティブで書いてやる。

<%@tag pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="bbb">びー</c:set>
<p>hello world</p>
<p>${bbb}</p>

タグが解釈された。OK

hello world
びー

では別のtagファイルのpiyo.tagタグを使ってみる。予想通り

<%@tag pageEncoding="UTF-8"%>
<%@taglib tagdir="/WEB-INF/tags" prefix="aaa"%>
<p><aaa:piyo /></p>

で使える。

body部があるタグ

body部があるタグ、piyo.tagを作ってみる。

このように作ると

piyo.tag
<%@tag pageEncoding="UTF-8"%>
<ul>
    <li><jsp:doBody /></li>
    <li><jsp:doBody /></li>
    <li><jsp:doBody /></li>
</ul>

こう使うと

<aaa:piyo>piyo body</piyo>

こんな感じに出力される

・piyo body
・piyo body
・piyo body

<jsp:doBody />と書くとそこがbody内容と置き換わるのだ。簡単!

属性値があるタグ

属性値のあるタグを作るときはattributeディレクティブで属性を宣言しておく。

内部で使うときはELで

<%@tag pageEncoding="UTF-8"%>
<%@attribute name="zokuzoku" %>
<%@attribute name="gakugaku" %>
<p>${zokuzoku}</p>
<p>${gakugaku}</p>

使うとOK!

<aaa:piyo zokuzoku="aaaa" gakugaku="bbbb" />

Javaのクラスを内部で使う

使うにはtagファイルのど頭で使いたいクラスをtagディレクティブで引き込む

<%@tag import="net.hoge.piyo.fuga.Moge"%>

そして内部のスクリプトレット中では

<%@tag import="net.hoge.piyo.fuga.Moge"%>
<%@tag pageEncoding="UTF-8"%>
<%@attribute name="zokuzoku" %>
<%@attribute name="gakugaku" %>
<%
jspContext.setAttribute("buruburu", jspContext.getAttribute("zokuzoku") + "ぶるぶる" );
%>
<p>${zokuzoku}</p>
<p>${gakugaku}</p>
<p>${buruburu}</p>

のようにJSPでよく使う暗黙のpageContextではなくjspContextという変数を使ってスコープにアクセスする

バージョン

  • 2012-11-13

タグ

java/jsp/make_my_tag_ver_jsp_20.txt · 最終更新: 2019-05-08 10:21 by ore