ApcoordinatorのDB連携部品を用いたデータベース連携アプリケーション作成
参考)
UJIタグには、同じように表示できる表形式のタグが2種類(uji:tableView、uji:table)あります。画面に表示する内容は変わらないのですが、使用方法とタグの記述方法に違いがあります。uji:tableは繰り返しデータを表の形式で表示するための画面部品タグであり、uji:tableViewはデータを表の形式で表示するコンポーネントタグなので、基盤が異なります。また、タグの記述方法と対応するDB連携部品クラスも異なります。
表-1に2つのタグの比較を示します。
表-1 uji:tableViewとuji:tableの比較
| UJIタグ |
メリット |
注意事項 |
| uji:tableView |
TableViewタグを使用するだけで、簡単に作成できるuji:tableViewのタグ内で画面に関する細かな設定が可能であるアトリビュートは全列共通の指定と列ごとの指定が可能である |
特になし |
| uji:table |
行や列の表示方法の細かな制御が可能である |
TableRendererタグやHTMLのタグを使用する必要があるデータを表示する場合はuji:tableタグ内にuji:tableRendererタグを1つ以上記述する必要があり、それ以外のタグは使用できないため、限られた設定になる画面に関する設定は、JSPソースにHTMLで記述する必要がある |
表-1で比較すると、uji:tableViewの方が簡単に作成でき、文字や背景の色等の細かな設定も可能なため、効率的に作業を行えます。使い慣れている場合や運用環境等、使用状況に応じて2つのタグを使い分けるべきです。DB連携部品が提供している機能(メソッド)に関しては、同等に使用できます。
では、uji:tableViewとuji:tableの処理の違いを、実際のJSPページ、データBean、ビジネスクラスで確認します。
リスト-5に、リスト-1と同じ画面を表示するuji:tableを使用したJSPページの例を示します。
リスト-5 uji:tableを使用したJSPページの例
1 <%@ page contentType="text/html; charset=shift_jis" %>
2 <%@ taglib uri="uji-taglib" prefix="uji" %>
3 <uji:useBean id="body" request="true" cls="test1.DataViewBean" />
4 <FORM method="post">
5 <INPUT type="hidden" value="search" name="uji.verbs">
6 <INPUT type="hidden" value="body" name="uji.id">
7 <INPUT type="hidden" value="test1.DataViewBean" name="uji.bean">
8 <BR>データベースを選択して検索ボタンを押して下さい。
9 <BR>
10 <SELECT name="dbname">
11 <OPTION>data1
12 <OPTION>data2
13 <OPTION>data3
14 </SELECT>
15 <INPUT type="submit" value="検索" name="search">
16 <uji:table property="data" bean="body"/>
17 <uji:tableRenderer type="table">
18 <TABLE><uji:children/></TABLE>
19 </uji:tableRenderer>
20 <uji:tableRenderer type="column" cls="header" >
21 <TH><uji:value /></TH>
22 </uji:tableRenderer>
23 <uji:tableRenderer type="column" >
24 <TD><uji:value /></TD>
25 </uji:tableRenderer>
26 </uji:table>
27 </FORM>
|
uji:tableViewでは1行の処理で画面表示できますが、同じ処理をuji:tableViewで行うと、リスト-5の16行目から26行目までの処理が必要です。
リスト-6に、uji:tableを使用したビジネスクラスの例を示します。
リスト-6 uji:tableを使用したビジネスクラスのDB連携部分
<省略>
1 import com.fujitsu.uji.database.*;
2
3 public class SampleHandler extends com.fujitsu.uji.GenericHandler {
4
5 public void startup(DispatchContext context) {
6 context.setResponseBean("body", new MenuBean());
7 }
8
9 public void search(DispatchContext context, MenuBean dataBean) {
10 String dbname = dataBean.getDbname(); //接続名取得
11 DBApplicationProfile app = (DBApplicationProfile)context.getApplicationProfile();
12 DBConnectionInfo connection = app.getDBConnectionInfo(dbname); //コネクション取得
13
14 DBTableModel table = new DBTableModel(connection); //表のオブジェクト生成
15 try {
16 table.query("SELECT ID,NAME,PHONE FROM TEST1 ORDER BY ID"); //ID,NAME,PHONE取得
17 } catch (Exception ex) {}
18 ex.printStackTrace();
19 }
20 DataViewBean bean = new DataViewBean();
21 bean.setDbname(dbname);
22 bean.setData(table);
23 context.setResponseBean("body", bean);
24 }
25 }
|
リスト-3とは「DBTableView」クラスを「DBTableModel」クラスに変更した点が異なります。
リスト-7に、uji:tableを使用したデータBeanの例を示します。
リスト-7 uji:tableを使用したデータBean
<省略>
1 import com.fujitsu.uji.database.*;
2 public class DataViewBean extends com.fujitsu.uji.DataBean {
3
4 protected String dbname; //接続名
5 protected DBTableModel data; //テーブル情報
6
7 public String getDbname() {
8 return dbname;
9 }
10 public void setDbname(String dbname) {
11 this.dbname = dbname;
12 }
13
14 public DBTableModel getData() {
15 return data;
16 }
17 public void setData(DBTableModel data) {
18 this.data = data;
19 }
20 }
|
5行目の変数名、14行目の復帰値の型、17行目の引数の型以外は、リスト-4と同じです。