ここでは、行動予定表アプリケーションの実装の詳細に関する説明を行っています。
1 表やコンボボックス形式のデータを扱うクラスの作成
行動予定表アプリケーションでは、行動予定一覧を表示していますが、Apcoordinatorでは表形式、コンボボックス形式、ツリー形式などのデータを表示するための仕組みを用意しています。これらをコンポーネントタグと呼んでいます。コンポーネントタグを使用する手順は以下のとおりです。
コンポーネントの表示に必要なクラスを作成します。
データBeanに上記クラスのインスタンスを設定(set)および取得(get)できるように、内部変数とメソッドの実装をします。
入出力ページ側にApcoordinatorでサポートしている"uji:comboBox"や"uji:tableView"タグを実装します。
ここでは、ComboBox、TableView、FieldString、FieldLong、FieldTextAreaクラスを使用します。これらのクラスは、それぞれApcoordinatorでサポートしている項目クラスのインタフェースをインプリメントしています。
コンポーネントタグを使用することにより以下の利点があります。
定型的な表現形式(表やツリー)を簡単に表示することができます。また、色や大きさなどの外観も簡単に変更できます。
入力データ値のチェックが簡単に行えます。また、数値項目のフォーマットが簡単に指定できます。
表の中である特定の列や行、または特定のセルにしるしをつけ、入出力ページ側で色を変えるなどの異なる表示が可能になります。
この行動予定表アプリケーションにおいては、次の目的でコンポーネントタグを使用しています。
項目クラス名 | 使用する利点 |
---|---|
ComboBox | コンボボックス形式の表現を容易に実現するためです。 |
TableView | 表形式のデータを容易に容易に実現するためです。 |
FieldString | 文字列入力フィールドを容易に実現するためです。 |
FieldLong | 数値入力フィールドを容易に実現し、値の下限、上限を設定するためです。 |
FieldTextArea | 複数行テキスト入力フィールドを容易に実現するためです。 |
2 行動予定データを保持するクラスの設計
行動予定表アプリケーションでは課員の行動予定を格納するクラスを考えます。以下の2つのクラスを用います。
DataManager
UserRecord
DataManagerは、課員情報を管理するクラスです。内部のVector変数で一つ以上のUserRecordクラス(課員一人の予定データを格納するクラス)のインスタンスを保持します。任意のUserRecordのインスタンス書き換えが可能です。
UserRecordは、「名前」、「行き先」、「帰社時間」、「メモ」の一組のデータを保持するクラスです。すべての項目の書き換えが可能です。
DataManagerクラスが各レコード(UserRecord)を要素とするVector型で管理しています。データ保持の主体はUserRecordです。ビジネスクラスでは、全課員の行動予定データの参照・更新はDataManagerに対して行います。
3 行動予定表データの復元と保存
行動予定表アプリケーションは、初期化時に、ファイルからシリアライズ(オブジェクトをストリームに変換する動作のこと)された行動予定表データを読み込み、復元を行います。行動予定表アプリケーションは、「予定表更新」ボタンを押すごとにDataManagerのインスタンスをシリアライズしてファイルに保存します。
この動作により、常に最新の予定が保存されます。上記の処理は、以下のタイミングで行われます。
処理内容 | 処理が行われるタイミング |
---|---|
行動予定表データの読み込み | ビジネスクラスのstartupメソッドが呼ばれたとき |
行動予定表データの保存 | ビジネスクラスのupdateUserScheduleメソッドが呼ばれたとき |
4 データBeanとScheduleModel, UserModelクラスの関係
データBeanは入出力ページが一覧を表示できるように、ScheduleModelとUserModelを直接入出力ページに渡します。データBeanはこれらクラスをset,getするメソッドを実装する必要があります。データBeanとそれぞれの扱うクラスの関係は以下のとおりです。
データBean | 扱うクラス | クラスの説明 |
---|---|---|
ScheduleBean | TableView | 行動予定一覧を表示するためのクラス |
UserScheduleBean | FieldString,FieldLong,FieldTextArea | 行動予定一覧を表示するためのクラス |
ProfileBean | ComboBox | 課員選択を表示するためのクラス |
上記表に基づきデータBeanに対応するクラスの入出力メソッドを実装します。実装方法については、“3.3.4 入出力ページの作成”を参照してください。
5 内部構造の説明
ここでは簡単にデータの流れとデータ形式の説明します。各オブジェクトの関係図は以下のとおりです。矢印の向きはデータの流れをあらわします。
シリアライズはビジネスクラスが保持するDataManagerのインスタンスについて、更新のたびに行われます。以下は上記の図に出てくる各コンポーネントの説明です。
入出力ページ名 | 説明 |
---|---|
title.jsp | 画面の一番上のタイトルを表示する入出力ページ |
usermenu.jsp | 課員一覧を表示して選択する入出力ページ |
table.jsp | 行動予定一覧を表示する入出力ページ |
userschedule.jsp | 課員ごとの行動予定を表示・編集できる入出力ページ |
データBean名 | 説明 |
---|---|
TitleBean | タイトルに表示する今日の日付を保存するBean |
ProfileBean | 課員一覧情報を保存するBean |
ScheduleBean | 行動予定表情報を保存するBean |
UserScheduleBean | 各課員の項目情報を保存するBean |
データの流れは、矢印で表しています。矢印の向きはデータの流れる方向を表しています。両方向の矢印は、データの流れが双方向であることを示し、単方向の矢印は、入力か出力かのどちらかを示しています。
ビジネスクラスである、BoardHandler内では、startup, showUserSchedule,updateUserScheduleの各メソッドが呼ばれるたびに、BoardApplication内部に格納しているDataManagerを用いてデータBeanに値を設定しています。データBeanと入出力ページ間のデータのやり取りは、ページの遷移とともに自動的に行われます。