この演習では、My Company Directory アプリケーションで、 新規従業員レコードを追加できるようにします。
新規従業員を追加する場合、アプリケーションの動作はより複雑かつダイナミックであるため、この演習は本質的に少し複雑であり、 ユーザーはソース・コードの一部を手操作で変更する必要があります。 さらに、この演習では、データ・オブジェクトの高度な機能の一部を示して、 必要に応じてバインダーおよびデータ・オブジェクトおよびバインダーを使用できる方法の創造的な例を紹介します。
以下の項目は、アプリケーションで必須の動作の説明です。
サンプル Web サービスは、次に利用可能な従業員 ID 番号を持つ、 新しい空の従業員レコードを提供する createNewFullEmployeeRecord サービスを 提供します。 この空のレコードは、新しい従業員の情報を取り込んで、Web サービスに 再度サブミットされます。
詳細フィールドおよび「Update」ボタンは、(新規従業員の更新および作成の両方の実行のため) モードを切り替える必要があるため、 これらはそれぞれ異なる時点で 2 つの異なるデータ・オブジェクトにバインドされる必要があります。 このステップを容易にするために、ユーザーは switchingDataObject という名前の基本データ・オブジェクトを追加します。 この基本データ・オブジェクトを使用して、 テキスト・フィールドのバインディングを selectedEmployeeRecord と newEmployeeRecord との間で切り替えます。
各従業員詳細フィールドが既に selectedEmployeeRecord にバインドされていても、 ここでは、それらを switchingDataObject にバインドします。 これらのフィールドをバインドしたならば、既存の従業員レコードを変更する場合か、 または新規従業員レコードを追加するかによって、 テキスト・フィールドのデータ・オブジェクト間を動的に切り替えることができます。
次の updateMode() メソッドは、モード・フラグが「新規」に設定されているかどうか調べるために検査して、 状況に応じて、それに従ってアプリケーションの動作を変更します。 デフォルトでは、Boolean のフラグの isNewMode は「false」に設定されています。 また updateMode() メソッドは、従業員テーブルと「Filter」フィールドを使用可能にし、 「Update」ボタンのテキストを「Update」に設定します。 isNewMode を「true」に設定すると、従業員テーブルは使用不可になり、 選択項目があると解除され、「Filter」フィールドは使用不可になり、 「Update」ボタンのテキストは「Add」に設定されます。
private boolean isNewMode = false; private void updateMode() { if (isNewMode) { getEmployeesTable().clearSelection(); getEmployeesTable().setEnabled(false); getFilterField().setEditable(false); getUpdateCreateButton().setText("Add"); } else { getEmployeesTable().setEnabled(true); getFilterField().setEditable(true); getUpdateCreateButton().setText("Update"); } }
このステップでは、「New」ボタンがクリックされたときのイベント・コードを追加します。 イベントは、switchingDataObject に対して newEmployeeRecord データ・オブジェクトを使用するように指示を出し、 モード・フラグを「新規」に設定して、直前のステップでユーザーが追加した updateMode() メソッドを実行します。
直前の課題では、modifyEmployee メソッドを Web サービスで使用するために、 「Update」ボタンをプログラムしました。 そのアクションは、SwingDataServiceAction としてインプリメントされています。 SwingDataServiceAction のプロパティーの 1 つにソース・オブジェクトがあります。 これは、サービスの引数としての役割を果たします。 変更アクションのソース・オブジェクトは、現在、selectedEmployeeRecord に設定されています。 更新と追加の両方を制御するようにボタンをプログラムするためには、 switchingDataObject を modifyEmployee サービスの引数として使用するようにボタンのアクションを再構成します。
「Update」ボタンをクリックして、Web サービス上のアクションが完了した後で、 アプリケーションをデフォルトのモードおよびボタン動作に戻したい場合があります。 これを行うには、更新および追加が実行された後にモードを更新し、テーブルを最新表示するアクション・バインダー上のイベント・リスナーを追加します。
modifyEmployeeAction.addActionBinderListener( new jve.generated.IActionBinder.ActionBinderListener() { public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) { if (isNewMode) { //Go back to using the selectedEmployeeRecord getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord()); //Revert out of new mode isNewMode = false; updateMode(); } // Refresh the table's data object getLightEmployeeRecordRows().refresh(); } public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} });