SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

DisplayTagとJavaScriptによる高機能なテーブルの作成

フリーのタグライブラリを使ってJSPのテーブル作成を効率化する

DisplayTagライブラリを使用する理由

 まず、なぜDisplayTagライブラリを使用するのかを考えてみましょう。JSTLやHTMLでデータテーブルを作成してはいけないのでしょうか? そのような方法でテーブルを作成することも可能ですが、問題は、膨大な手間がかかることです。実際、動的データを表示するごく単純なテーブルを作成するにも、<table><tr><td><c:forEach><c:choose><c:when><c:out>というタグを使用しなければなりません。

 1つの方法は、JSFベースのアプリケーションに切り替えることです。例えば、ApacheのTomahawkライブラリの<t:dataTable>タグを使用すれば、JSTLやHTMLのタグを使わずに済み、なおかつ列の並べ替え機能を実現できます。また、最近オープンソース化されたOracleのADFコンポーネントライブラリを使うという方法もあります。このライブラリの<af:table>タグは、列の並べ替え、ページナビゲーション、行の選択をサポートしています(しかし、テーブルデータのエクスポートには対応していません)。ただし、これらの方法には、JSFベースのアプリケーションでしか機能しないという大きな欠点があります。

 ここで紹介しておきたいのが、eXtremecomponentsの<ec:table>タグです。これは我々が求める要件をほぼ満たしており、グループ化と小計の計算ができないだけです。

DisplayTagライブラリのインストール

 自分で開発しているWebアプリケーションにDisplayTagの機能を追加するには、次のようにします。

  1. サンプルアプリケーションの「DisplayTagEx/WebContent/WEB-INF/lib」ディレクトリに含まれている一連のJARを、Webアプリケーションの「WEB-INF/lib」ディレクトリにコピーします。最新のDisplayTagライブラリと従属ファイルをdisplaytag.sourceforge.netからダウンロードしてもかまいません。
  2. サンプルアプリケーションの「DisplayTagEx/WebContent/css」ディレクトリを、Webアプリケーションのルートにコピーします。このディレクトリ内の「displaytagex.css」には、本稿で説明するCSSスタイルがすべて含まれています。
  3. サンプルアプリケーションの「DisplayTagEx/WebContent/images」ディレクトリを、Webアプリケーションのルートにコピーします。このディレクトリには、ページナビゲーション(先頭へ、前へ、次へ、末尾へ)と並べ替え(昇順/降順)の機能に使われる画像が入っています。
  4. サンプルアプリケーションの「DisplayTagEx/src/displaytag.properties」ファイルを、Webアプリケーションの最上位のソースディレクトリにコピーします。このプロパティファイルについては次の節で説明します。

 本稿のサンプルアプリケーションを実際のアプリケーションサーバーにインストールして実行するには、次のようにします(ここではTomcat 5を想定)。

  1. Tomcatの「/webapps」ディレクトリの下に「DisplayTagEx」というディレクトリを作成します。
  2. サンプルアプリケーションの「DisplayTagEx/WebContent/」の内容をTomcatの「/webapps/DisplayTagEx」にコピーします。
  3. Tomcatを実行します。
  4. ブラウザから「http://localhost:8080/DisplayTagEx」を参照します。

基本的な使い方

 実際にDisplayTagライブラリを使用するには、次の3段階のプロセスを踏みます。

  1. JSPの先頭でタグライブラリをインポートします。
  2. <%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
    
  3. CSSファイルにリンクします。
  4. <link rel="stylesheet" type="text/css"
        href="css/displaytagex.css">
    
  5. <display:table>タグを追加し、このタグ内に<display:column>タグを記述します。例えば次のようにします。
  6. <display:table name="${orderDetails}" class="dataTable">
        <display:column property="customerName" />
        <display:column property="productName" />
    </display:table>
    

 この例では、<display:table>タグは${orderDetails}というEL式からデータを取得しています。本稿のサンプルアプリケーションにおいて、orderDetailsは、コンテキストの初期化時に作成されるOrderDetailオブジェクトのArrayListを表します。ここではテーブルのclass属性をdataTableに設定していますが、これはCSSファイル「displaytagex.css」(リスト2参照)内の.dataTableスタイルに対応します。DisplayTagライブラリは、表の奇数行と偶数行のclass属性をそれぞれoddとevenに自動的に設定するので、それぞれに異なる背景色を簡単に割り当てることができます。なお、oddとevenはDisplayTag CSSのクラス名ですが、dataTableというクラス名は私が自由に付けたものです。

 DisplayTagライブラリには何十という機能があり、表示しようとする個々のテーブルについて、それぞれの機能を細かく設定することができます。この設定を行う最も効率的な方法は、「displaytag.properties」ファイル(リスト3参照)に記述することです。

リスト3 Displaytag.properties
sort.amount=list
paging.banner.placement=top
paging.banner.all_items_found=
paging.banner.some_items_found=
paging.banner.one_item_found=
paging.banner.onepage=
paging.banner.full=<div class="pagelinks" align="right"><a href={1}>
    <img src="images/first.gif"></a><a href={2}>
    <img src="images/prev.gif"></a>{0}<a href={3}>
    <img src="images/next.gif"></a><a href={4}>
    <img src="images/last.gif"></a></div>
paging.banner.first=<div class="pagelinks" align="right"><a href={1}>
    <img src="images/first.gif"></a><a href={2}>
    <img src="images/prev.gif"></a>{0}<a href={3}>
    <img src="images/next.gif"></a><a href={4}>
    <img src="images/last.gif"></a></div>
paging.banner.last=<div class="pagelinks" align="right"><a href={1}>
    <img src="images/first.gif"></a><a href={2}>
    <img src="images/prev.gif"></a>{0}<a href={3}>
    <img src="images/next.gif"></a><a href={4}>
    <img src="images/last.gif"></a></div>
export.banner=<div class="pagelinks" align="right">{0}</div>
export.types=csv excel xml pdf rtf
export.excel=true
export.csv=true
export.xml=true
export.pdf=true
export.rtf=true
export.excel.class=org.displaytag.export.excel.DefaultHssfExportView
export.pdf.class=org.displaytag.export.DefaultPdfExportView
export.rtf.class=org.displaytag.export.DefaultRtfExportView
export.excel.filename=data.xls
export.pdf.filename=data.pdf
export.xml.filename=data.xml
export.csv.filename=data.csv
export.rtf.filename=data.rtf

 このファイルでは、Webサイト全体で共通して適用するテーブルプロパティのデフォルト値を設定します。例えば、サンプルアプリケーションの「displaytag.properties」には、paging.banner.placement=topという行が含まれています。これは、ページナビゲーションバナーを既定でテーブルの上に配置することを意味します。特定のテーブルでこのプロパティ(またはその他のプロパティ)の既定値とは異なる設定を使用したい場合は、次のようにテーブル内に<display:setProperty>タグを入れ子で記述します。

<display:table ... >
    <display:setProperty name="paging.banner.placement"
        value="bottom" />
</display:table>

次のページ
列の並べ替えと書式設定

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Stephen Strenn(Stephen Strenn)

カリフォルニア大学デービス校で電子工学の修士号を取得。Cogito Research Groupの主任調査員であり、赤外線検出器企業のコンサルタントを務める。進化計算、人工知能、ロボット工学の分野でいくつかの著作を発表。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/362 2006/08/22 15:45

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー