< Indietro | Avanti >

Lezione 2.6: Impostare azioni e binding per l'aggiunta di un nuovo dipendente

In questa lezione verrà abilitata l'applicazione My Company Directory per l'aggiunta del record di un nuovo dipendente.

Poiché il comportamento dell'applicazione è più complicato e dinamico per l'aggiunta di un nuovo dipendente, questo esercizio è più complesso e verrà richiesto di effettuare alcune modifiche manuali al codice di origine. Inoltre, questo esercizio mostra alcune funzioni avanzate degli oggetti dati, e fornisce un esempio dei diversi modi in cui è possibile utilizzare i binder e gli oggetti dati.

Il seguente elenco descrive il comportamento previsto dell'applicazione:

  • Scegliendo Nuovo, si verifica il seguente comportamento:
    • La selezione viene cancellata nella tabella dei dipendenti e la tabella viene disabilitata.
    • La cancellazione della selezione nella tabella fa sì che il pulsante Elimina venga disabilitato.
    • Viene disabilitato il campo Filtro.
    • I valori nel campo dei dettagli vengono cancellati, fatta eccezione per il nuovo ID dipendente.
    • Il testo del pulsante Aggiorna diventa Aggiungi.
  • Scegliendo Aggiungi, si verifica il seguente comportamento:
    • I valori immessi nei campi dei dettagli vengono aggiunti alla struttura come nuovo record di dipendente.
    • La tabella viene abilitata e i valori vengono aggiornati.
    • Il campo Filtro viene abilitato.
    • Il testo del pulsante Aggiungi diventa Aggiorna.

Aggiunta di un nuovo Oggetto dati dell'origine dati che richiama createNewFullEmployeeRecord()

Il servizio Web di esempio fornisce un servizio createNewFullEmployeeRecord che a sua volta fornisce un record di dipendente nuovo, vuoto in cui verrà inserito il primo numero di ID dipendente disponibile. In questo record vuoto possono successivamente essere inserite le informazioni relative al nuovo dipendente e inoltrate al servizio Web.

  1. Nella tavolozza dell'editor visivo Java, espandere il cassetto Oggetti di dati e selezionare Oggetto dati dell'origine Java.
  2. Spostare il mouse sull'area vuota della vista di progettazione o sull'area a formato libero e fare clic con il pulsante sinistro del mouse per rilasciare l'Oggetto dati dell'origine Java. Un nuovo Oggetto dati dell'origine dati viene aggiunto e mostrato nell'area a formato libero:

    Oggetto dati dell'origine dati nell'area a formato libero. Non configurato.

  3. Selezionare l'oggetto dati dell'origine dati con il pulsante destro del mouse e scegliere Rinomina campo. Rinominare l'oggetto dati in newEmployeeRecord.
  4. Selezionare l'oggetto dati newEmployeeRecord con il pulsante destro del mouse e selezionare Proprietà di binding. Viene visualizzata la finestra Binding di dati.
  5. Nel campo Origine dati, selezionare webServiceDataSource
  6. Nel campo Servizio, selezionare createNewFullEmployeeRecord()
  7. Scegliere OK.
Nell'area a formato libero, viene visualizzato l'oggetto dati dell'origine dati newEmployeeRecord associato al servizio Web.

Oggetto dati newEmployeeRecord, connessi a webServiceDataSource

Aggiunta di un Oggetto dati di base per facilitare l'alternanza degli oggetti dati

Poiché i campi dei dettagli e il pulsante Aggiorna devono alternare le modalità (sia per eseguire un aggiornamento che per la creazione di un nuovo dipendente), dovranno essere associati a due diversi oggetti dati in due momenti diversi. Per semplificare queste operazioni, aggiungere un oggetto dati di base chiamato switchingDataObject. Tale oggetto verrà utilizzato per alternare il binding per i campi di testo tra selectedEmployeeRecord e newEmployeeRecord.

Il nuovo oggetto dati di base, indica semplicemente un altro oggetto dati (selectedEmployeeRecord) definito in uno degli esercizi precedenti. Questo nuovo oggetto dati risulterà utile durante la creazione di un metodo che indica all'oggetto di utilizzare il newEmployeeRecord creato precedentemente. In altre parole, l'oggetto dati di base funzionerà come oggetto dati intermedio che passa dall'oggetto dati selectedEmployeeRecord all'oggetto dati newEmployeeRecord, consentendo ai componenti visivi dell'applicazione di utilizzare due diversi oggetti dati.
  1. Nella tavolozza dell'editor visivo, selezionare Oggetto dati di base, e rilasciarlo nell'area a formato libero. Viene aggiunto un basicDataObject.

    Oggetto di dati di basi sull'area a formato libero, non configurato

  2. Ridenominare l'oggetto dati in switchingDataObject
  3. Nella vista Proprietà di switchingDataObject, impostare la proprietà sourceObject su selectedEmployeeRecord. È possibile selezionare selectedEmployeeRecord dal menu a discesa nella colonna Valore della proprietà.

    Adesso, switchingDataObject fa riferimento a selectedEmployeeRecord e ne rispecchia gli stessi valori:

    switchingDataObject in un'area a formato libero, connesso all'oggetto dati selectedEmployeeRecord

Rebinding di ciascun campo di dipendente a switchingDataObject

Anche se i campi dei dettagli del dipendente sono già associati a selectedEmployeeRecord, adesso verranno associati a switchingDataObject. Dopo aver associato i campi, sarà possibile passare dinamicamente da un oggetto dati all'altro per i campi, in base alle modifiche apportate al record di un dipendente esistente o all'aggiunta di un nuovo record.

Per ciascuno dei campi nella sezione Dettagli dipendente, procedere come segue:
  1. Selezionare il campo e fare clic sulla scheda Binding.
  2. Nella finestra Binding di dati campo, selezionare switchingDataObject. Precedentemente sono stati associati i campi a selectedEmployeeRecord.

    Finestra Binding di dati di campo che mostra lastNameField associato alla proprietà lastName su switchingDataObject

  3. Assicurarsi che il campo sia ancora associato alla proprietà dell'oggetto dati e scegliere OK. Se si seleziona il campo nella vista di progettazione, è possibile vedere che le linee del binder adesso indicano l'oggetto switchingDataObject.

    Campo dei dettagli associato a switchingDataObject

Definizione di un indicatore e di un metodo per l'aggiornamento e l'alternanza delle modalità

Il seguente metodo updateMode() controlla se il modo è impostato su Nuovo, quindi modifica alcuni comportamenti dell'applicazione di conseguenza. Per impostazione predefinita, l'indicatore booleano isNewMode è impostato su false, il metodo updateMode() abilita la tabella dipendenti e il campo dei filtri e imposta il testo sul pulsante Aggiorna su "Aggiorna". Se isNewMode è impostato su true, la tabella dei dipendenti viene disabilitata e qualsiasi selezione sarà annullata, il campo filtro viene disabilitato e il testo sul pulsante Aggiorna viene impostato su "Aggiungi".

Aggiungere il seguente codice alla classe DirectoryApp.java prima dell'ultima parentesi graffa chiusa:
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");
   }
}

Aggiunta di un evento actionPerformed al pulsante Nuovo

In questa fase, verrà aggiunto il codice di evento per il pulsante Nuovo. L'evento indica a switchingDataObject di utilizzare l'oggetto dati newEmployeeRecord, imposta l'indicatore di modalità su "new" ed esegue il metodo updateMode() aggiunto precedentemente.

  1. Nella vista di progettazione, selezionare il pulsante Nuovo con il tasto destro del mouse e scegliere Eventi > actionPerformed. Nel metodo getNewButton() viene generato il seguente codice:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
       }
    });
  2. Sostituire lo stub generato con il seguente codice:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
          getNewEmployeeRecord().refresh();
          isNewMode = true; //sets application to new mode
          updateMode(); //changes UI according to new mode
          getLastNameField().grabFocus();
       }
    });

Rebinding del pulsante Aggiorna

In una delle lezioni precedenti, è stato programmato il pulsante Aggiorna affinché utilizzi il metodo modifyEmployee sul servizio Web. Questa azione viene implementata come una SwingDataServiceAction. Una delle proprietà di SwingDataServiceAction è l'oggetto di origine, che agisce come argomento per il servizio. L'oggetto di origine per l'azione di modifica è al momento impostato su selectedEmployeeRecord. Per programmare il pulsante affinché controlli sia l'aggiornamento che l'aggiunta, è necessario riconfigurare l'azione del pulsante per utilizzare switchingDataObject come argomento nel servizio modifyEmployee.

  1. Nella vista di progettazione, selezionare il pulsante Aggiorna. Osservare la freccia rosa, punteggiata che mostra che selectedEmployeeRecord è l'argomento per la chiamata al servizio.
  2. Fare clic sulla scheda Binding nel pulsante Aggiorna.
  3. Nel campo Argomento, selezionare switchingDataObject.

    Binding di azioni componente per il pulsante Aggiorna che utilizza switchingDataObject

  4. Scegliere OK.

    A questo punto, osservare che l'azione del pulsante è configurata per utilizzare switchingDataObject come argomento per il metodo modifyEmployee:

    Pulsante Aggiorna associato al servizio Web con switchingDataObject come argomento

Aggiunta di un evento al binder del pulsante Aggiorna per reimpostare la modalità

Dopo aver fatto clic su Aggiorna e una volta che l'azione è stata completata sul servizio Web, ripristinare la modalità e il comportamento predefinito dell'applicazione. Per ottenere questo risultato, aggiungere un listener di eventi al binder di azioni del pulsante che aggiornerà la modalità e aggiornerà la tabella dopo aver eseguito l'aggiornamento o l'aggiunta.

Aggiungere il seguente codice al metodo getModifyEmployeeAction() per il pulsante Aggiorna:
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) {} 
});

Riepilogo della lezione

Adesso, quando si esegue l'applicazione My Company Directory, sarà possibile aggiungere un nuovo record di dipendente scegliendo Nuovo.

< Indietro | Avanti >