< Précédent | Suivant >

Leçon 2.6 : Configuration des actions et des liaisons pour l'ajout d'un nouvel employé

Dans cette leçon, vous allez compléter l'application My Company Directory afin de permettre à l'utilisateur d'ajouter un nouvel enregistrement d'employé.

Comme l'ajout d'un nouvel employé exige de l'application un comportement plus compliqué et plus dynamique, cet exercice est plus complexe et nécessite que vous apportiez quelques modifications manuelles au code source. Il illustre également certaines fonctions avancées des objets de données et donne un exemple créatif des différentes techniques d'utilisation des lieurs (binders) et objets de données pour répondre à des besoins spécifiques.

La liste suivante décrit le comportement requis de l'application :

  • Lorsque vous cliquez sur le bouton New, l'application se comporte de la manière suivante :
    • La sélection est effacée de la table des employés et la table est désactivée.
    • L'effacement de la sélection entraîne la désactivation du bouton Delete.
    • La zone Filter est désactivée.
    • Toutes les valeurs des zones de détails sont effacées, excepté celle de l'ID d'employé, qui reçoit une nouvelle valeur.
    • Le texte du bouton Update est remplacé par Add.
  • Lorsque vous cliquez sur le bouton Add, l'application se comporte de la manière suivante :
    • Les valeurs entrées dans les zones de détails sont ajoutées à l'annuaire pour former un nouvel enregistrement d'employé.
    • La table est activée et les valeurs qu'elle contient sont actualisées.
    • La zone Filter est activée.
    • Le texte du bouton Add redevient Update.

Ajouter un nouvel objet de données de source de données appelant la méthode createNewFullEmployeeRecord()

L'exemple de service Web comporte une méthode createNewFullEmployeeRecord dont le rôle est de fournir un nouvel enregistrement d'employé vide, recevant le premier ID d'employé disponible. L'enregistrement vide peut alors être alimenté par les données d'un nouvel employé et renvoyé au service Web.

  1. Dans la palette de l'éditeur visuel Java, ouvrez le tiroir Objets de données et sélectionnez Objet de données de la source de données.
  2. Amenez le pointeur de la souris sur une partie vide de la vue de conception (ou zone à format libre) et cliquez avec le bouton gauche pour déposer l'objet de données. Un nouvel objet de données de source de données est ajouté et affiché dans la zone à format libre :

    Objet de données de source de données dans la zone à format libre. Non configuré.

  3. Cliquez avec le bouton droit sur l'objet de données et sélectionnez Renommer la zone. Renommez l'objet de données en newEmployeeRecord.
  4. Cliquez avec le bouton droit sur l'objet de données newEmployeeRecord et sélectionnez Propriétés de liaison. La boîte de dialogue Liaison de données s'affiche.
  5. Dans la zone Source de données, sélectionnez webServiceDataSource.
  6. Dans la zone Service, sélectionnez la méthode createNewFullEmployeeRecord().
  7. Cliquez sur OK.
Dans la zone à format libre, vous pouvez voir que l'objet de données newEmployeeRecord est maintenant lié au service Web.

Objet de données newEmployeeRecord, connecté à webServiceDataSource

Ajouter un objet de données de base pour faciliter la commutation des objets de données

Comme les zones de détails et le bouton Update doivent pouvoir alterner entre deux modes (un pour la mise à jour d'un enregistrement d'employé existant et un autre pour l'ajout d'un nouvel enregistement), ils doivent être liés à deux objets de données différents, correspondant chacun à l'un de ces deux modes. Pour faciliter cette étape, vous allez ajouter un objet de données de base appelé switchingDataObject. Cet objet permettra de commuter la liaison des zones de texte entre les objets selectedEmployeeRecord et newEmployeeRecord.

Le nouvel objet de données de base pointe simplement sur un autre objet de données (selectedEmployeeRecord) que vous avez défini au cours d'un exercice précédent. Il deviendra utile lorsque vous créerez une méthode lui indiquant d'utiliser l'objet newEmployeeRecord que vous avez créé précédemment. En d'autres termes, il servira d'objet intermédiaire alternant entre les objets de données selectedEmployeeRecord et newEmployeeRecord. Ce mécanisme permettra aux composants visuels de l'application de fonctionner avec deux objets de données différents.
  1. Dans la palette de l'éditeur visuel, sélectionnez Objet de données de base et déposez le nouvel objet sur une partie vide de la zone à format libre. Un objet basicDataObject est ajouté.

    Objet de données de base dans la zone à format libre, non configuré

  2. Renommez l'objet de données en switchingDataObject
  3. Dans la vue Propriétés de l'objet switchingDataObject, affectez la valeur selectedEmployeeRecord à la propriété sourceObject. Vous pouvez sélectionner selectedEmployeeRecord dans le menu déroulant de la colonne Valeur de la propriété.

    A présent, switchingDataObject fait référence à selectedEmployeeRecord et reflète les mêmes valeurs :

    switchingDataObject dans la zone à format libre, connecté à l'objet de données selectedEmployeeRecord

Redéfinir la liaison de chaque zone de l'enregistrement d'employé à l'objet switchingDataObject

Les zones de détails de l'employé sont toutes déjà liées à selectedEmployeeRecord, mais vous devez maintenant les lier à switchingDataObject. Une fois ces liens établis, vous pourrez alterner dynamiquement entre les deux objets de données, selon que vous modifiez un enregistrement d'employé existant ou que vous ajoutez un nouvel enregistrement d'employé.

Pour chacune des zones de la section Employee details, effectuez les étapes suivantes :
  1. Sélectionnez la zone et cliquez sur son onglet Lier.
  2. Dans la boîte de dialogue Liaisons de données de zone, sélectionnez l'objet switchingDataObject. Vous avez précédemment lié les zones à l'objet selectedEmployeeRecord.

    Boîte de dialogue Liaisons de données de zone illustrant la zone lastNameField liée à la propriété lastName de l'objet switchingDataObject

  3. Assurez-vous que la zone est toujours associée à la propriété correcte de l'objet de données, puis cliquez sur OK. Si vous sélectionnez la zone dans la vue de conception, vous pouvez voir que les lignes de liaison pointent à présent sur l'objet switchingDataObject.

    Zone de détails liée à switchingDataObject

Définir un fanion et une méthode pour la mise à jour et la commutation des modes

La méthode updateMode() présentée ci-après vérifie si le fanion isNewMode est true ou false, puis elle change en conséquence le comportement de l'application. Par défaut, le booléen isNewMode a la valeur false, ce qui signifie que le mode "mise à jour d'enregistrement" est en vigueur. Dans ces conditions, la méthode updateMode() active la table des employés et la zone Filter et affecte le texte "Update" au bouton updateCreateButton. Si le fanion isNewMode prend la valeur true, la table des employés est désactivée et ne comporte plus de sélection, la zone Filter est également désactivée et le texte du bouton devient "Add".

Ajoutez le code suivant à votre classe DirectoryApp.java, juste avant la dernière accolade fermante :
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");
   }
}

Ajouter un événement actionPerformed au bouton New

Dans cette étape, vous allez ajouter un code d'événement qui sera utilisé lorsque le bouton New sera actionné. Cet événement indique à switchingDataObject d'utiliser l'objet de données newEmployeeRecord, affecte la valeur "true" au fanion isNewMode et exécute la méthode updateMode() que vous avez ajoutée à l'étape précédente.

  1. Dans la vue de conception, cliquez avec le bouton droit sur le bouton New et sélectionnez Evénements > actionPerformed. Le code suivant est généré dans la méthode getNewButton() :
    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. Remplacez cette souche générée par le code suivant :
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
          getNewEmployeeRecord().refresh();
          isNewMode = true; // place l'application en mode 'nouvel enregistrement'
          updateMode(); // change le comportement de l'interface graphique conformément au mode 
    'nouvel enregistrement' getLastNameField().grabFocus();
       }
    });

Redéfinir la liaison du bouton Update

Dans une précédente leçon, vous avez programmé le bouton Update afin qu'il utilise la méthode modifyEmployee du service Web. Cette action est implémentée sous forme de SwingDataServiceAction. Une des propriétés du SwingDataServiceAction est l'objet source, qui sert d'argument passé à la méthode du service. Actuellement, l'objet source de l'action de modification (modifyEmployeeAction) est selectedEmployeeRecord. Pour programmer le bouton afin qu'il contrôle alternativement une mise à jour et un ajout d'enregistrement, vous allez reconfigurer son action de sorte qu'elle utilise l'objet switchingDataObject comme argument passé à la méthode de service modifyEmployee.

  1. Dans la vue de conception, sélectionnez le bouton Update. Notez la flèche en pointillés de couleur rose. Elle indique que selectedEmployeeRecord est l'argument passé dans l'appel à la méthode de service.
  2. Cliquez sur l'onglet Lier du bouton Update.
  3. Dans la zone Argument, sélectionnez switchingDataObject.

    Liaisons du bouton Update utilisant maintenant switchingDataObject comme argument

  4. Cliquez sur OK.

    Notez que l'action du bouton est maintenant configurée pour utiliser switchingDataObject comme argument à passer à la méthode modifyEmployee :

    Bouton Update lié au service Web avec switchingDataObject comme argument

Ajouter un événement au lieur du bouton Update pour réinitialiser le mode

Une fois que l'utilisateur a cliqué sur le bouton Update et que l'action correspondante a été effectuée par le service Web, l'application doit retrouver son comportement et son mode par défaut. Pour cela, vous allez ajouter un écouteur d'événements au lieur d'action du bouton, qui changera le mode et actualisera la table une fois la mise à jour ou l'ajout d'enregistrement effectué.

Ajoutez le code suivant à la méthode getModifyEmployeeAction() pour le bouton Update :
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { 
    public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {    
      if (isNewMode) {
        //Rétablir l'utilisation de selectedEmployeeRecord
        getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord());
        //Sortir du mode 'nouvel enregistrement'
        isNewMode = false; 
        updateMode();
      }
      //Actualiser l'objet de données de la table
      getLightEmployeeRecordRows().refresh();
    }
    public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} 
});

Récapitulatif de la leçon

A présent, lorsque vous exécutez l'application My Company Directory, vous pouvez cliquer sur le bouton New pour ajouter un nouvel enregistrement d'employé.

< Précédent | Suivant >