DAO経由でデータベースにアクセスする
では、このDAOクラスを利用してデータベースアクセスするスクリプトを作成してみることにしましょう。ここでは一例として、findAllを呼び出してデータの一覧を表示させてみます。
<?page title="Index Page"?> <zk> <zscript> var gmsg = ""; public class DAO { ……略…… } class SampleRowData { private String name; private String mail; private String tel; public SampleRowData(){} public SampleRowData(String s1,String s2,String s3){ name = s1; mail = s2; tel = s3; } public String getName(){ return name; } public void setName(String s){ name = s; } public String getMail(){ return mail; } public void setMail(String s){ mail = s; } public String getTel(){ return tel; } public void setTel(String s){ tel = s; } } class SampleRowRenderer implements RowRenderer { public void render(Row row, java.lang.Object obj){ SampleRowData data = (SampleRowData)obj; new Label(data.getName()).setParent(row); new Label(data.getMail()).setParent(row); new Label(data.getTel()).setParent(row); } } DAO dao = new DAO(); ArrayList result = dao.findAll(); ListModelList modellist = new ListModelList(result); SampleRowRenderer renderer = new SampleRowRenderer(); </zscript> <window title="Welcome to ZK!" border="normal" width="500px"> <label>※入力フォームのレイアウト</label> <separator />[${gmsg}]<separator /> <grid width="90%" model="${modellist}" rowRenderer="${renderer}"> <columns sizable="true"> <column label="名前" /> <column label="メールアドレス" /> <column label="電話番号" /> </columns> </grid> <separator /><separator /> </window> </zk>
アクセスすると、<grid>を使ってデータを表にまとめて表示します。ここではDAOの他、データを保管するためのSampleRowDataクラスと、行データを表示するためのSampleRowRendererクラスを用意してあります。スクリプトでは、DAOインスタンスを作成し、findAllを呼び出してデータをListとして取得し、SampleRowRendererでレンダラーを作成しています。
DAO dao = new DAO(); ArrayList result = dao.findAll(); ListModelList modellist = new ListModelList(result); SampleRowRenderer renderer = new SampleRowRenderer();
こうして用意されたデータのListとレンダラーを使い、<grid>にデータを表示させています。それが以下の部分です。
<grid width="90%" model="${modellist}" rowRenderer="${renderer}"> <columns sizable="true"> <column label="名前" /> <column label="メールアドレス" /> <column label="電話番号" /> </columns> </grid>
見れば分かるように、繰り返しなどは一切使っていませんし、実際にデータを表示する<rows>タグはありません。ここでは、<grid>に「model="${modellist}"」というようにしてmodel属性を設定しています。このようにmodelを使ってListや配列を指定することで、その中身を自動的に表示するようにできるのです。いちいち繰り返しなどを使ってデータを出力する必要はありません。
ここではデータの一覧を表示しているだけですが、DAOには既にデータベースアクセスの基本メソッドは用意されていますから、これを利用してデータベースアクセスするのは簡単です。例えばデータを追加/削除したければ、次のように実行するだけです。
dao.insert(new SampleRowData("はなこ","hanako@tanaka.com","070-777-777"));
dao.delete("たろう");
それぞれで、DAOを利用した機能を実装してみるとよいでしょう。ZKには、確かにデータベース専用の機能はありませんが、これは「特別なことは何も無い」と考えることもできます。ごく普通のアプリケーションでデータベースにアクセスできるなら、ZKでもまったく同じやり方でできるはずなのです。
まとめ
3回に渡って、ZKによるWebアプリケーション作成について説明をしてきました。ZKは、厳密に言えば「Javaフレームワーク」とはいえないものでしょう。確かにサーバーサイドJavaの技術を使って実装されており、サーブレットコンテナで動作はしますが、そこで使用するスクリプトはJava(BeanShell)に限定されているわけではなく、JRubyやJythonなどさまざまなスクリプト言語を利用してコーディングできます。Javaの上に構築されていますが、Javaなど知らないRubyやPythonのプログラマがそのままZKで開発を行うこともできるのです。
Javaは、「Javaというプログラミング言語」としてだけでなく、今やさまざまな言語を動かすための「環境」として浸透しつつあります。Javaベースだけれど、Java以外の言語を利用したフレームワークは、今後も増えていくことでしょう。こうした「Javaという環境」を使ったフレームワークの代表格として、ZKは非常に注目すべきものと言えるのではないでしょうか。