直前の課題では、Web サービスで getLightEmployeeRecords() サービスが戻した lightEmployeeRecordRows データ・オブジェクトに employeesTable をバインドしました。 ここでは、テーブルで選択した従業員に基づく詳細フィールドにデータを取り込む必要があります。
選択したそれぞれの従業員の詳細を得るには、別のデータ・オブジェクトを使用します。 追加する selectedEmployeeRecord データ・オブジェクトは、getFullEmployeeRecord() サービスによって戻されます。 このサービスは、テーブルから選択した従業員の ID をパラメーターとして取り込み、 さらに、電話番号や部署などの従業員の詳細データを取り込みます。
行データ・オブジェクトにテーブルをバインドしたときに使用した JRowTableBinder を使用すると、 この手順は簡単になります。 JRowTableBinder は、テーブル内で個別のデータ・オブジェクトとして選択したエレメントを公開し、 このデータ・オブジェクトが getFullEmployeeRecord(java.lang.Integer) メソッドのパラメーターとして使用できます。 次に、それぞれのテキスト・フィールドを selectedEmployeeRecord データ・オブジェクト内の対応するプロパティーに、 簡単にバインドできます。
背景説明: Web サービスには、 それぞれの従業員のすべての詳細データを取得するための 2 つのサービスがあります。 テーブルには全従業員がリストされますが、テーブルに表示されるのはデータのサブセットだけです。 次に 1 人の従業員を選択したときに、選択されたその従業員に限り、この従業員の残りの情報を取り出すことができます。 Web サービスが、テーブルの要求する各従業員すべてのデータを送ると、 Web トラフィックが重くなり、アプリケーションのパフォーマンスは低下します。 例えば、従業員のレコードに写真や添付資料が含まれている場合、 従業員の全リストを作成するだけのために、すべての写真まで取り出す必要はありません。 このため、getLightEmployeeRecord サービスを使用してテーブルにデータを取り込み、 テーブルで選択された従業員の全レコードは、getFullEmployeeRecord が取り込みます。
「ラストネーム」フィールドを selectedEmployeeRecord データ・オブジェクトの lastName プロパティーにバインドするには、次のようにします。
背景説明: getFullEmployeeRecord(java.lang.Integer) には、引き数としての整数が必要です。 全レコードを取り出すには、従業員テーブルで現在選択している従業員 ID を使用します。 テーブルをバインドすると、ビジュアル・エディターが jRowTableBinder を自動的に生成し、 従業員テーブルで現在選択している項目を listen します。 整数パラメーターには、 jRowTableBinder で選択した行の employeeID を使用します。
selectedEmployeeRecord という名前の新しいデータ・オブジェクトが作成されて、 アプリケーションに追加されます。 データ・オブジェクトのビジュアル表示が次の画像のようにデザイン・ビューのフリー・フォーム域に追加されます。
この後、デザイン域で「lastName」フィールドを選択すると、selectedEmployeeRecord
にバインドされていることが線によって示されます。線の中央にあるテキスト・バインダー アイコンは、このバインディングに使用される
SwingTextComponentBinder を示しています。デザイン域で線またはバインダーを示すアイコンを選択すると、
「プロパティー」ビューでそのバインダーのプロパティーを調べることができます。
残りの各フィールドをバインドするには、ラストネーム・フィールドと同様の手順を実行しますが、 データ・オブジェクトを追加する必要はありません。 既に selectedEmployeeRecord データ・オブジェクトを追加したため、 それぞれのフィールドを selectedEmployeeRecord データ・オブジェクトの対応するプロパティーにバインドするだけで済みます。
フィールドをバインドするには、このアプリケーションの「従業員の詳細」セクションにあるフィールドのそれぞれに対して、 次の手順を実行します。
フィールド | selectedEmployeeRecord データ・オブジェクトのプロパティー |
---|---|
lastNameField | lastName |
firstNameField | firstName |
idField | employeeID |
emailField | |
phoneField | phoneNum |
officeField | location.office |
buildingField | location.building |
siteField | location.site |
「従業員 ID」フィールドは、そのフィールド上で編集可能プロパティーが「false」に設定されているため、 使用不可になっています。 しかし、テキスト・フィールド・バインダーのデフォルト動作は、データ・オブジェクトに値が含まれていると、 使用可能の状態に変更されます。 フィールドが最初の読み取り専用状態のままになるように、このバインダー動作をオフにすることができます。
バインダーが編集可能プロパティーに自動的に切り替わるのを防止するには、以下の手順を実行します。
これでアプリケーションを実行し、テーブルから従業員を選択したときに、 その従業員のレコードの詳細が詳細フィールドに表示されます。