|
JSP 2.0では、
SimpleTagインターフェースとそれを実装した
SimpleTagSupportクラスができました。
これらを使うと、
基本的なカスタムタグなら
1.2までのTagSupport、BodyTagSupportクラスを使うよりも、
より少ないコードでを作ることができるようになりました。
ここではサンプルとして、次のJSP文書に示す3種類のカスタムタグを作ります。
<%@ page language="java" contentType="text/html;charset=Shift_JIS" %>
<%@ page pageEncoding="Shift_JIS" %>
<%@ taglib prefix="u" uri="http://urano.dav/ushitag" %>
<html>
<body>
今日は、<u:today /> です。<br>
只今、<u:now format="yyyy/MM/dd HH:mm:ss" />です。<br>
只今、
<u:nowbody>
HH:mm:ss
</u:nowbody>
です。<br>
</body>
</html>
|
1行目に示すように、接頭辞uで示すタグライブラリは
URI=http://urano.dav/ushitag
で示すタグライブラリデスクリプタを参照するようにしています。
タグライブラリデスクリプタについては後述します。
u:today は本体のないシンプルなタグで、今日の日付を
yyyy/MM/dd 形式で表示します。
u:now も同様ですが、こちらは「format」という属性を持っていて、
サンプルのように日時書式を指定することができます。
またu:nowbody は普通このような使い方はしないと思いますが、
タグの本体に日付書式を書いて、その書式で現在の日時を表示するタグです。
●クラス定義
それぞれのタグに対応するクラスです。
いずれも import javax.servlet.jsp.tagext.SimpleTagSupport
クラスを拡張しています。
また ushitag というパッケージに属するので、
コンパイルできたら $APP_HOME/WEB-INF/classes/ushitag に配置します。
/**
* TodaySimpleTag.java
* 2003/06/03
*/
package ushitag;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.util.*;
import java.text.*;
/**
* 現在の日付を表示します。
*/
public class TodaySimpleTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
Calendar cal = new GregorianCalendar();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String nowstr = format.format(cal.getTime());
getJspContext().getOut().write(nowstr);
}
}
/* end. */
|
/**
* NowSimpleTag.java
* 2003/06/03
*/
package ushitag;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.util.*;
import java.text.*;
/**
* 現在の日付を表示します。属性format=で日付書式の指定が可能
* (デフォルト=yyyy/MM/dd)です。
*/
public class NowSimpleTag extends SimpleTagSupport {
private String format = "yyyy/MM/dd";
public String getFormat(){ return format; }
public void setFormat(String format){ this.format = format; }
public void doTag() throws JspException, IOException {
Calendar cal = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat(format);
String nowstr = sdf.format(cal.getTime());
getJspContext().getOut().write(nowstr);
}
}
/* end. */
|
/**
* NowSimpleBodyTag.java
* 2003/06/03
*/
package ushitag;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.util.*;
import java.text.*;
/**
* 現在の日付を表示します。タグ本体で日付書式の指定が可能
* (デフォルト=yyyy/MM/dd)です。
*/
public class NowSimpleBodyTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
StringWriter sw = new StringWriter();
//getJspBody().invoke(sw, null);
getJspBody().invoke(sw);
String format = sw.toString().trim();
if(format.equals("")) format = "yyyy/MM/dd";
Calendar cal = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat(format);
String nowstr = sdf.format(cal.getTime());
getJspContext().getOut().println(nowstr);
}
}
/* end. */
|
●web.xmlとタグライブラリデスクリプタ
<?xml version="1.0" encoding="Shift_JIS" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>SimpleTagのサンプル</description>
<tlib-version>1.0</tlib-version>
<short-name>ushitag</short-name>
<uri>http://urano.dav/ushitag</uri>
<tag>
<description>今日の日付を返す</description>
<name>today</name>
<tag-class>ushitag.TodaySimpleTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<description>現在の日時を返す(属性で日付書式指定可)</description>
<name>now</name>
<tag-class>ushitag.NowSimpleTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>format</name>
<required>false</required>
</attribute>
</tag>
<tag>
<description>現在の日時を返す(本体部で日付書式指定可)</description>
<name>nowbody</name>
<tag-class>ushitag.NowSimpleBodyTag</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4">
<description>
JSP 2.0 Examples.
</description>
<display-name>JSP 2.0 Examples</display-name>
<taglib>
<taglib-uri>http://urano.dav/ushitag</taglib-uri>
<taglib-location>/WEB-INF/ushitag.tld</taglib-location>
</taglib>
</web-app>
|
(first uploaded 2003/06/06 last updated 2003/06/06, URANO398)
|