応用編!Ajaxで表計算機能

2008年9月18日(木)
清野 克行

グリッドデータの登録、更新、削除

図2は「更新」ボタンをクリックして、表示されている東京都区人口を更新した後の画面です。前回紹介した参照も含め、登録、更新、削除処理では、DWRがサーバーとの通信で使用され、DWRサーブレット、JavaBeans経由でデータベースにアクセスします。

この画面で最初に登録、更新、削除ボタンをクリックした時のイベント処理から確認していきます。

リスト3はイベントリスナの設定です。ボタンクリックのイベントリスナは、initOnLoad関数内のsetListenerで行われています。このsetListenerは筆者が作成した関数ですが、第一引数のID値「mod」を属性に持つノードで、第二引数のマウスクリック(click)イベントを検知した時に、第三引数のmodGrid関数を呼び出します。

ここで、第一引数で指定されるノードは、リスト4のように各ボタンの上位ノード(TDタグ)になっており、下位ノードでのイベントを上位ノードで検知することになります。

このサンプルで使用されているイベントリスナ方式(DOMイベントモデル)のイベント処理では、発生したイベントはノード間を伝搬することができ、通常下位ノードから上位ノードに伝搬する「バブリングフェーズ」が使用されます。

このサンプルではバブリングでのイベント伝搬を利用し、リスト4に記述されている登録、更新、削除ボタンのクリックで発生したイベントを上位のTDタグで検知しています。

このようなイベントリスナの設定により、各ボタンクリックからmodGrid関数が呼び出されますが、modGridはリスト5のように、登録、更新、削除すべてのサーバーアクセス処理を行っています。

リスト5のmodGrid関数では、最初の2行でサーバーへの送信データ(テーブル名、行数、列数)を配列parmsにセットし、次のgetid(e)でクリックされたボタンのID値が変数eidに返されます。

getid(e)は筆者が作成した関数で、イベントオブジェクトeを引数にとり、イベント発生ノードのID属性値を返します。リスト5のように、登録、更新、削除の各処理要求はgetidから返されたeidを使用して判断・実行されます。

つまりこのサンプルではeidには登録、更新、削除の各ボタンノードのID値がセットされており、eidで処理を切り分けることができます。

このように切り分けて処理される、登録、更新、削除のDWRによるサーバー通信は、Ajax標準の非同期通信処理に比べて大変シンプルです。

リスト5の登録、更新処理ではこの2種類のテーブルアクセスをそれぞれ分けて行い、削除処理では両方まとめて行っていますが、DWRでのサーバーアクセスはすべて1行コードで行われています。またサーバーアクセスのレスポンス、つまり処理ステータスの表示は共通のmodStat関数を使っており、これも1行のコードで処理されています。

なお、上記の2種類のテーブルアクセスとは、テーブル名と行数、列数などから構成される「ヘッダー情報テーブル」と、グリッドの各セルデータを格納する「セル情報テーブル」を指します。

サーバー側処理プログラム

サーバー側ではDWR-Servlet経由で受け取ったリクエストデータを使用し、ヘッダー情報テーブル(table_hdr)とセル情報テーブル(table_dtl)の2つのテーブルを更新します。

リスト6とリスト7がそれぞれの更新メソッドですが、特にリスト7のセルデータ更新でDWRを使用した場合の特徴を見ることができます。

グリッドデータは、クライアントからJavaScriptの二次元配列としてサーバーに送信されリスト7のupdGridメソッドを、Javaでの二次元配列(String[][] cdat)として問題なく受け取り、更新データとして使用します。

つまりDWRが配列データの言語間の違いを吸収・変換しているのです。DWRではこのほかにも、主要なデータ型を自動変換する機能を持っており、ストレスを感じさせないサーバープログラミングを可能にしています。

サーバー側のプログラミングについては、本連載では詳しく触れませんが、「第2回:DWRでAjaxプログラムをかんたん作成!(http://www.thinkit.co.jp/article/136/2/)」で見てきたDWRを使用する場合の以下のサーバー側処理手順は、ここでも当然行われています。

  1. 作成したJavaBeansのdwr.xml登録
  2. DWRデバッグ画面での動作確認の手順、

それでは最後に、グリッド表示データを使用した簡単な表計算機能について紹介しましょう。

有限会社サイバースペース
慶應義塾大学工学部電気科卒。日本IBM、日本HPなどにおいて、製造装置業を中心とした業務系/基幹業務系システムのSE/マーケティングや、3階層C/Sアーキテクチャによる社内業務システム開発などに携わる。現在は、Ajax/Web 2.0関連のセミナー講師/コンサルティング、書籍執筆などを行っている。情報処理学会会員。http://www.at21.net/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています