In dieser Lerneinheit ermöglichen Sie es der Anwendung 'My Company Directory', einen neuen Mitarbeiterdatensatz hinzuzufügen.
Das kompliziertere und dynamischere Verhalten der Anwendung für das Hinzufügen eines neuen Mitarbeiters macht auch diese Übung unweigerlich komplexer. Sie werden einige manuelle Änderungen am Quellencode vornehmen müssen. Darüber hinaus werden in dieser Übung einige erweiterte Funktionalitäten der Datenobjekte demonstriert, und es wird Ihnen ein kreatives Beispiel dafür geliefert, wie Sie die Binder und Datenobjekte an Ihre Anforderungen anpassen können.
In der folgenden Liste ist das erforderliche Verhalten der Anwendung beschrieben:
Der Beispiel-Web-Service stellt den Service 'createNewFullEmployeeRecord' mit einem neuen, leeren Mitarbeiterdatensatz zur Verfügung, der mit der nächsten verfügbaren Mitarbeiter-ID gefüllt wird. Dieser leere Datensatz kann anschließend mit den Informationen eines neuen Mitarbeiters gefüllt und an den Web-Service zurück übergeben werden.
Da bei den Detailfeldern und bei der Schaltfläche 'Aktualisieren' ein Umschalten des Modus (sowohl zum Ausführen einer Aktualisierung als auch zum Erstellen eines neuen Mitarbeiters) erforderlich ist, müssen sie zu unterschiedlichen Zeiten an zwei unterschiedliche Datenobjekte gebunden werden. Um diesen Schritt zu erleichtern, fügen Sie ein Basisdatenobjekt namens 'switchingDataObject' hinzu. Sie verwenden dieses Basisdatenobjekt zum Umschalten des Bindings für die Textfelder zwischen 'selectedEmployeeRecord' und 'newEmployeeRecord'.
Es sind zwar bereits alle Mitarbeiterdetailfelder an selectedEmployeeRecord gebunden, nun binden Sie sie jedoch an switchingDataObject. Nach dem Binden der Felder können Sie dynamisch zwischen Datenobjekten für die Felder in Abhängigkeit davon umschalten, ob Sie einen vorhandenen Mitarbeiterdatensatz ändern oder einen neuen Mitarbeiterdatensatz hinzufügen.
Die folgende Methode 'updateMode()' prüft, ob die Modusmarkierung auf 'new' gesetzt ist, und ändert das Verhalten der Anwendung anschließend entsprechend. Standardmäßig ist die Boolesche Markierung 'isNewMode' auf 'false' gesetzt, und die Methode 'updateMode()' aktiviert die Mitarbeitertabelle und das Filterfeld und setzt den Text der Schaltfläche zum Aktualisieren auf 'Aktualisieren'. Wenn 'isNewMode' auf 'true' gesetzt wird, wird die Mitarbeitertabelle inaktiviert, die Auswahl wird ggf. aufgehoben, das Filterfeld wird inaktiviert und der Text der Schaltfläche zum Aktualisieren wird auf 'Hinzufügen' gesetzt.
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"); } }
In diesem Schritt fügen Sie Ereigniscode für das Klicken auf die Schaltfläche Neu hinzu. Das Ereignis gibt für das switchingDataObject vor, das Datenobjekt 'newEmployeeRecord' zu verwenden, es setzt die Modusmarkierung auf 'new' und führt die Methode 'updateMode()' aus, die Sie im vorherigen Schritt hinzugefügt haben.
In einer früheren Lerneinheit haben Sie die Schaltfläche Aktualisieren für die Verwendung der Methode 'modifyEmployee' für den Web-Service programmiert. Diese Aktion wird als SwingDataServiceAction implementiert. Eine der Eigenschaften der SwingDataServiceAction ist das Quellenobjekt, das als Argument für den Service dient. Das Quellenobjekt für die Änderungsaktion ist momentan auf 'selectedEmployeeRecord' gesetzt. Um die Schaltfläche für das Steuern einer Aktualisierung und einer Hinzufügung zu programmieren, werden Sie die Aktion der Schaltfläche neu konfigurieren, sodass sie 'switchingDataObject' als Argument für den Service 'modifyEmployee' verwendet.
Nach dem Klicken auf die Schaltfläche Aktualisieren und dem Beenden der Aktion für den Web-Service soll die Anwendung zurück auf ihren Standardmodus und ihr Standardverhalten gesetzt werden. Hierzu fügen Sie dem Aktionsbinder der Schaltfläche einen Ereignislistener hinzu, der den Modus und die Tabelle aktualisiert, nachdem das Aktualisieren oder Hinzufügen abgeschlossen ist.
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) {} });