Javaプログラミング/サーバサイド&ケータイJava

カスタムタグに挑戦!(4ページ目)

汎用的な処理をオリジナルのタグとして使えるようにしましょう。

執筆者:掌田 津耶乃

タグクラスのソースコード


では、作成したMyFirstTagHandlerがどのようになっているか、ソースコードを見てみましょう。初期状態では、以下のようなものが作成されているはずです。

package jp.tuyano;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;

public class MyFirstTagHandler extends SimpleTagSupport {
    
    public void doTag() throws JspException {
        JspWriter out=getJspContext().getOut();
        try {
            
            JspFragment f=getJspBody();
            if (f != null) f.invoke(out);
            
        } catch (java.io.IOException ex) {
            throw new JspException(ex.getMessage());
        }
    }
}


コメント類はすべて省略しました。見ればわかるように、MyFirstTagHandlerはSimpleTagSupportというクラスを継承して作られています。このSimpleTagSupportは、もっとも単純なタグハンドラクラスです。これは「単独でボディをもたないタグ」を作成するためのクラスなのです。

タグの中には、<a>○○</a>というように開始タグと終了タグがあってその間に何らかのテキスト(これがボディ)を記述するタイプのものと、<hr>や<br>タグのように1つのタグを書くだけで終了タグもボディも持たないタイプのものがあります。このSimpleTagSupportは、1つのタグだけで完結するタイプのタグを作るためのものです。

この他、JspFragmentというものを取得するコードがデフォルトで作成されていますが、今回はこれは使いません。削除してもかまわないものですので、今は無視してください。

このクラスには「doTag」というメソッドが1つだけ用意されています。これが、タグを呼び出した際に実行される処理を記述する部分です。

では、ここに簡単なタグの処理を用意してみましょう。ここでは、ごく単純ですが今日の日付を表示する処理を作成しておきます。

package jp.tuyano;

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;

public class MyFirstTagHandler extends SimpleTagSupport {
  
  public void doTag() throws JspException {
    JspWriter out=getJspContext().getOut();
    try {
      GregorianCalendar gc = new GregorianCalendar();
      SimpleDateFormat df = new SimpleDateFormat("yyyy年 M月 d日(E)");
      String date = df.format(gc.getTime());
      out.println("<span style=\"font-size:10pt; font-weight:bold;
          background-color:#ddddff;\">");
      out.println(date);
      out.println("</span>");
      
      JspFragment f=getJspBody();
      if (f != null) f.invoke(out);
      
    } catch (java.io.IOException ex) {
      throw new JspException(ex.getMessage());
    }
    
  }
}


JSP側への出力は、JspWriter out=getJspContext().getOut();で取得したJspWriterを使って行なえます。ここではGregorianCalendarとSimpleDateFormatを使って今日の日付のStringを用意し、これをout.printlnで出力させています。そのままではつまらないので、<span>タグを使ってちょっと表示をアレンジしてみました。


  • 前のページへ
  • 1
  • 3
  • 4
  • 5
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます