< Précédent | Suivant >

Leçon 2.3 : Liaison des zones de détails à la ligne sélectionnée dans la table

Dans l'exercice précédent, vous avez lié le composant visuel employeesTable à l'objet de données lightEmployeeRecordRows renvoyé par la méthode getLightEmployeeRecords() du service Web. Vous devez maintenant remplir les zones de détails de l'application en les liant aux données de l'employé sélectionné dans la table.

Pour obtenir les détails supplémentaires de chaque employé sélectionné, on utilise un autre objet de données. L'objet de données selectedEmployeeRecord que vous allez ajouter sera renvoyé par la méthode de service getFullEmployeeRecord(). Cette méthode prend comme paramètre d'entrée l'ID de l'employé sélectionné dans la table et récupère les autres détails de cet employé, notamment son numéro de téléphone et son lieu de travail.

Le JRowTableBinder qui a été utilisé lorsque vous avez lié la table à l'objet de données de lignes simplifie cette étape. Le JRowTableBinder expose l'élément sélectionné dans la table comme objet de données distinct, pouvant être utilisé comme paramètre de la méthode getFullEmployeeRecord(java.lang.Integer). Vous pouvez dès lors lier aisément chacune des zones de texte à la propriété correspondante dans l'objet de données selectedEmployeeRecord.

Le service Web utilisé dans ce tutoriel inclut deux méthodes chargées de récupérer les détails de chaque employé. La table répertorie tous les employés, mais elle n'affiche qu'un sous-ensemble de leurs données. Lorsque l'utilisateur sélectionne un employé dans la table, le reste des données concernant cet employé seul est récupéré pour alimenter les zones de détails. Si le service Web envoyait toutes les données de chaque employé à la table, cela augmenterait inutilement le trafic Web et nuirait aux performances de l'application.

Par exemple, si l'enregistrement d'employé comprenait une photo ou un fichier joint, vous ne souhaiteriez certainement pas récupérer toutes les photos lors de l'extraction de la liste complète des employés pour alimenter la table. La méthode de service getLightEmployeeRecord est donc utilisée pour remplir la table, tandis que la méthode getFullEmployeeRecord sert à extraire l'enregistrement complet de l'employé sélectionné dans la table.

Lier la zone Last name

Procédez comme suit pour lier la zone Last name à la propriété lastName de l'objet de données selectedEmployeeRecord :

  1. Dans la vue Beans Java ou dans la vue de conception, sélectionnez le composant JTextField lastNameField. Un onglet Lier apparaît en haut de la zone de texte, dans la zone de conception.

    Onglet Lier d'une zone de texte

  2. Cliquez sur l'onglet Lier pour ouvrir la boîte de dialogue Liaisons de données de zone.
  3. Cliquez sur Nouvel objet de données de source de données. L'objet de données jRowTableBinder existant renvoie le nom d'employé correct, mais il n'inclut pas l'enregistrement d'employé complet. Vous devez donc créer un nouvel objet de données représentant l'enregistrement d'employé complet.
  4. Vérifiez que Service Web est sélectionné dans la zone Type de la source et que webServiceDataSource est sélectionné dans la zone Source de données.
  5. Dans la zone Service source, sélectionnez getFullEmployeeRecord(java.lang.Integer). La boîte de dialogue Nouvel objet de données de source de données répertorie les services qui renvoient des objets de données compatibles avec une zone de texte.
  6. Dans la zone Nom, entrez selectedEmployeeRecord.
  7. Dans la zone Argument, sélectionnez jRowTableBinder et dans la zone Propriété, sélectionnez employeeID. L'ID employé de la ligne sélectionnée est désormais défini comme argument de la méthode de service getFullEmployeeRecord().
    Remarque : La méthode getFullEmployeeRecord(java.lang.Integer) requiert un entier comme argument. Pour extraire un enregistrement complet, vous souhaitez utiliser l'ID employé de la ligne sélectionnée dans la table des employés. Lorsque vous avez lié la table, l'éditeur visuel a généré automatiquement l'objet jRowTableBinder. Or, cet objet possède une propriété, employeeID, dont la valeur identifie la sélection courante dans la table. Pour l'entier à passer en argument à la méthode, vous allez donc utiliser la propriété employeeID de jRowTableBinder.

    Boîte de dialogue Nouvel objet de données de source de données

  8. Cliquez sur OK.
  9. Dans la boîte de dialogue Liaisons de données de zone, vérifiez que l'objet selectedEmployeeRecord est sélectionné dans la liste Objets de données. Notez que les propriétés disponibles pour l'objet de données selectedEmployeeRecord sont plus nombreuses que celles de l'objet jRowTableBinder.
  10. Dans la liste Propriétés des objets de données, sélectionnez la propriété lastName.

    Boîte de dialogue Liaisons de données de zone pour lastNameField

  11. Cliquez sur OK. La zone Last name de votre application est maintenant liée à la propriété lastName de l'objet de données selectedEmployeeRecord, qui est renvoyé par getFullEmployeeRecord().

    Un nouvel objet de données nommé selectedEmployeeRecord est créé et ajouté à votre application. Une représentation visuelle de cet objet est ajoutée à la zone à format libre de la vue de conception, comme l'illustre l'image suivante :

    Objet de données selectedEmployeeRecord

    A présent, lorsque vous sélectionnez la zone lastName dans la zone de conception, une ligne indique que cette zone est liée à l'objet selectedEmployeeRecord. Cette ligne comporte en son milieu une icône qui représente le lieur de texte SwingTextComponentBinder utilisé pour cette liaison. Si vous sélectionnez la ligne ou l'icône représentant le lieur dans la zone de conception, vous pouvez en consulter les propriétés dans la vue Propriétés.

Lier les zones de détails restantes

Pour lier les autres zones de détails de l'enregistrement d'employé, vous devez appliquer une procédure similaire à celle utilisée pour la zone Last name, mais vous n'avez pas besoin d'ajouter l'objet de données. Comme vous avez déjà ajouté l'objet de données selectedEmployeeRecord, vous n'avez plus qu'à lier chaque autre zone à la propriété correspondante de cet objet.

Procédez comme suit pour lier chaque autre zone de la section Employee details de l'application :
  1. Sélectionnez la zone concernée dans la vue de conception, puis cliquez sur son onglet Lier.
  2. Dans la boîte de dialogue Liaisons de données de zone, sélectionnez l'objet selectedEmployeeRecord dans la liste Objets de données.
  3. Dans la liste Propriétés des objets de données, sélectionnez la propriété appropriée à la zone que vous liez. Le tableau suivant indique la propriété à laquelle chaque zone de texte doit être liée :
    Zone Propriété de l'objet de données selectedEmployeeRecord
    lastNameField lastName
    firstNameField firstName
    idField employeeID
    emailField email
    phoneField phoneNum
    officeField location.office
    buildingField location.building
    siteField location.site
  4. Cliquez sur OK.

Lorsque vous avez fini de lier les zones de texte, la zone de conception doit ressembler à l'image suivante :

Vue du canevas graphique avec les zones de texte liées

Configurer la zone Employee ID en lecture seule

La zone Employee ID est désactivée (grisée) car sa propriété 'editable' a la valeur false. Cependant, par défaut, le lieur de zone de texte attribue la valeur true à cette propriété lorsque l'objet de données contient une valeur. Vous pouvez empêcher ce comportement afin que la zone demeure en lecture seule.

Pour empêcher le lieur de changer automatiquement la propriété 'editable' :
  1. Sélectionnez la zone Employee ID. Une ligne apparaît dans la zone de conception avec une icône icône du lieur de texte qui représente le lieur de la zone.
  2. Cliquez sur l'icône du lieur icône du lieur de texte de la zone Employee ID.
  3. Dans la vue Propriétés, affectez la valeur false à la propriété autoEditable. Appuyez sur Entrée.

Récapitulatif de la leçon

A présent, lorsque vous exécutez l'application et sélectionnez un employé dans la table, les détails de l'enregistrement de cet employé sont affichés dans les zones de détails.

< Précédent | Suivant >