View HelperパターンによるJSPファイルの実装

View Helperパターンの実装アプローチ

 JSPファイル用のヘルパ(Viewヘルパ)を開発する場合、2つの選択肢がある。1つは、JavaBeansコンポーネント(以下、Bean)を使う方法、もう1つはカスタム・タグを使用する方法だ。

 上記のいずれの方法を選択すべきかは、処理対象となるデータの種類によって異なる。通常、個々のデータを取り出す際にはBeanが使われることが多く、一連のデータを扱うような場合にはカスタム・タグのほうが適していると言える。とは言え、ここでは、「両タイプのデータに対して、基本的にはどちらの方法を使ってもよい」ということを覚えておいていただきたい。

 それでは以下に、上記2種類の方法によるヘルパの開発手順を説明していこう。

Beanによるヘルパの実装

 上述したように、JSPファイル用のヘルパはBeanとして実装できる(以下、Beanとして実装したヘルパを「JavaBeansヘルパ」と呼ぶ)。通常、JavaBeansヘルパを使うと、単純なテキスト項目の取り出しやデータのフォーマットといった処理を容易に実現することができる。Beanにアクセスするために用意されたJSPのタグはシンプルであり、これを用いればBeanを直感的に操作することが可能だ。

 Beanをヘルパとして使うには、まずJSPファイル内で目的のBeanの使用を宣言した後、それを特殊なタグを使って参照するだけでよい(以下参照)。

<%– Beanの使用を宣言する –%>

<jsp:useBean id="myBean" class="jspBook.util.myBean"/>

   

<%– Beanの名前を取得する –%>

Hello <jsp:getProperty name="myBean" property="firstName"/>,

welcome to Acme Products’ online store!

 Beanによって実現できるのは、Modelからデータ項目を取得することだけではない。例えば、特定のデータ項目をフォーマットしたり、計算を実行したり、大きなサイズのコンテンツを生成したりすることも可能だ。

 とは言え、JavaBeansヘルパは、基本的には、JSPにあらかじめ用意されたBean用のタグを使ってデータ項目を取得する用途に適している。JavaBeansヘルパでそれ以上のことを行おうとすると、途端にJSPファイル内がJavaコードであふれかえってしまうのだ。この問題は、ELを使っても完全には解決できない。もし、こうした問題に直面したら、必要な処理をカスタム・タグ内にカプセル化することを検討してほしい。

カスタム・タグによるヘルパの実装

 より複雑なModel変換が必要とされる場合には、カスタム・タグを使用する。カスタム・タグを使えば、タグ・ハンドラ内に繰り返し処理などの複雑な処理を記述できる一方で、Webデザイナーに対しては、タグ・ハンドラを呼び出すためのシンプルなカスタム・タグを公開することができる。

 カスタム・タグを使うには、クラスTagSupport、BodyTagSupportのいずれかを継承してタグ・ハンドラを作成した後、そのタグ・ハンドラをTLD(Tag Library Descriptor)ファイル内で以下のように宣言する。

<?xml version="1.0" encoding="ISO-8859-1" ?>

<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/j2eeweb-jsptaglibrary_2_0.xsd"

   version="2.0" >

   

<tlib-version>1.0</tlib-version>

<jsp-version>2.0</jsp-version>

<short-name>myTags</short-name>

<description>

   Tag library to support the examples in Chapter 8

</description>

<tag>

   <name>myTag</name>

   <tag-class>jspbook.ch08.myTag</tag-class>

   <body-content>JSP</body-content>

   <attribute>

      <name>myAttribute</name>

      <required>yes</required>

      </attribute>

</tag>

</taglib>

 そのうえで、JSPファイル内でカスタム・タグを使用する。具体的には、taglibディレクティブを使って同タグを宣言した後に、同タグを記述する(以下参照)。

<%@ taglib uri="/helpers" prefix="helpers" %>

   

<helpers:myTag myAttribute="《何らかの値》">

   ボディ部のテキスト…

</helpers:myTag>

 筆者は、大抵の場合、カスタム・タグを使ってViewヘルパを実装する。

 その理由の1つは、サーブレット・コンテキストへのアクセス機能が充実しており、アプリケーション・サーバ内でのプーリングを有効にすれば、パフォーマンスの向上もある程度期待できるからだ。

 また、Javaプログラムを読めないWebデザイナーでも、カスタム・タグであれば直感的に理解できる。

 さらに、カスタム・タグは、その開発/デバッグがいったん完了すれば、アプリケーション内の他のJSPファイルからも使うことができる。なお、カスタム・タグが十分に汎用的な作りになっている場合、さらにそれをタグ・ライブラリとしてパッケージ化し、他のアプリケーションで再利用することも可能である。


PAGE TOP