JSP SimpleTag

 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>

Server Side Java Index Top

(first uploaded 2003/06/06 last updated 2003/06/06, URANO398)

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル