menu
書いてる野郎
orebike@gmail.com
自作のタグを作るのだが以前は馬鹿みたいに手順が多くて仕様考えたやつは死ねばいいとおもってたけど、 最近は結構お手軽に追加できるようになってた。
任意のタグ名.tag
というファイルをWEB-INF以下に適当にディレクトリを掘って置く
WEB-INF +--tags +--hoge.tag
こんな感じ
使いたいJSPファイル中で名前空間と置き場所を指定してtaglibディレクティブで引き込む
<%@taglib tagdir="/WEB-INF/tags" prefix="aaa"%>
このtagdirはtagsという名前から始まらないといけないらしい
そして名前空間とファイル名にて指定されたタグ名で使う
<aaa:hoge />
<%@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部があるタグ、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" />
使うには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
という変数を使ってスコープにアクセスする