目次へ

6. カスタムタグの基本2

6.1. ボディ部を持つカスタムタグの作成

5章で作成したカスタムタグにボディ部を持たせるように改良します。ボディ部を持つために改良する点は以下の2点です。

  • doStartTagの返り値の変更
  • タグライブラリ・ディスクリプタの変更

まずカスタムタグ・ハンドラクラスを変更します。

import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import java.io.IOException;
  
public class HelloWorldTag implements Tag{
  ...  
  public int doStartTag() throws JspException{
    return EVAL_BODY_INCLUDE;
  }
  ...
}

「doStartTag」の返り値を「EVAL_BODY_INCLUDE」に変更するだけです。続いてタグ設定ファイルを変更します。

...
<taglib>
  ...
  <tag>
    <name>HelloWorld</name>
    <tag-class>HelloWorldTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
</taglib>

<body-content>の内容を「empty」から「JSP」に変更します。「tagdependent」でも構いませんが、意味から考えて「JSP」の方が良いです。

変更が完了したら、JSPページからタグを利用します。taglibディレクティブに変わりはありませんので、利用部分を変更するだけです。

<%@ page contentType="text/html; charset=EUC-JP" %>
<%@ taglib uri="http://www.techscore.com/tags/example" prefix="example" %>
...
<example:HelloWorld>Everyone<br></example:HelloWorld>
...

今回はボディ部に記述を行ってもコンパイルエラーが発生しません。「Everyone<br>Hello World」と表示されるかと思います。

上記の方法でボディ部を持つカスタムタグを作成できますが、ボディ部の内容そのものを使用することはできません。例えば「ボディ部の小文字を全て大文字に変えて表示するタグ」や「ボディ部に書かれえているSQL文を実行するタグ」を作成するためには、後の章で説明する「javax.servlet.jsp.tagext.BodyTag」インタフェースを使用する必要があります。

(実習課題1)

5. 実習課題2のカスタムタグを改良しなさい。

  • ボディ部を持てるようにする事。
  • 「doStartTag」で「ただいまの時刻は」と表示させるようにする事。「doEndTag」で現在時刻を表示させる事。
  • ボディ部と「doStartTag」「doEndTag」の関係がどのようになっているか把握する事。

解答例はこちら

(実習課題2)

実習課題1のカスタムタグを改良しなさい。

  • 「doEndTag」の返り値を「SKIP_PAGE」に変更する事。
  • カスタムタグを使用したJSPページの出力が、この変更によってどのように変わるか確かめる事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp