Tutoriel JSF2 N°9 : Gestion Événements

Avec Objis, spécialiste formation JSF, comprenez la gestion des événements à base de composants fournit par JSF

Objectifs

- Mettre en œuvre la gestion des événement sur un composant JSF.

Programme

- Contexte et rappels
- Partie 1 : gestion changements de valeur
- Partie 2 : gestion actions

Durée

15 min.

Qui sommes-nous ?

PNG - 102.4 ko

Contexte et rappels

La gestion des événements repose donc sur deux types d’objets
- Event : classe qui encapsule l’événement lui même
- Listener : classe qui va encapsuler les traitements à réaliser pour un type d’événements

INFO 1 : Un objet de type Event encapsule le composant à l’origine de l’événement et des données relatives à cet événement.

INFO 2 : Pour être notifié d’un événement particulier, il est nécessaire d’enregistrer un objet qui implémente l’interface Listener auprès du composant concerné.

Lors de certaines actions de l’utilisateur, un événement est émis.

L’implémentation JSF propose deux types d’événements :
- ValueChanged : ces événements sont émis lors du changement de la valeur d’un composant de type UIInput, UISelectOne, UISelectMany, et UISelectBoolean
- Action : ces événements sont émis lors d’un clic sur un hyperlien ou un bouton qui sont des composants de type UICommand

Comme pour les interfaces graphiques des applications standalone, la classe de type Listener doit s’enregistrer auprès du composant concerné. Lorsque celui-ci émet un événement suite à une action de l’utilisateur, il appelle le Listener enregistré en lui fournissant en paramètre un objet de type Event.

IMPORTANT :
- JSF supporte trois types d’événements :
- 1) Les changements de valeurs : concernent les composants qui permettent la saisie ou la sélection d’une valeur et que cette valeur change
- 2) Les actions : concernent un clic sur un bouton (commandButton) ou un lien (commandLink)
- 3) Les événements liés au cycle de vie : ils sont émis par le framework JSF durant le cyle de vie des traitements

Partie 1 : gestion Changement valeur

- Découvrez deux façons de préciser un listener de type valueChangeListener sur un composant :

METHODE 1 : utiliser l’attribut valueChangeListener

PNG - 25.2 ko
utilisation de l’attribut valueChangeListner

- L’attribut valueChangeListener permet de préciser une expression qui désigne une méthode(changeCodeLocalePays) qui sera exécutée durant les traitements du cyle de vie de la requête. Pour que ces traitements puissent être déclenchés, il faut soumettre la page.

- Téléchargez et copiez la vue main.xhtml dans le dossier WebContent.

Zip - 728 octets
main.xhtml

- La méthode qui réalise les traitements lors de l’interception de l’évènement.

PNG - 32.4 ko
methode changeCodeLocalePays

Info :
- l’objet ValueChangeEvent en paramètre de la méthode, possède plusieurs méthodes utiles :
— UIComponent getComponent() : renvoie le composant qui a généré l’événement.
— Object getNewValue() : renvoie la nouvelle valeur (convertie et validée)
— Object getOldValue() : renvoie la valeur précédente

- Télécharger et installer dans le package com.objisformation.jsf2 beanCountryBean.java contenant la méthode

Zip - 979 octets
CountryBean.java

- A ce stade l’exécution de l’application sur le serveur cible Tomcat donne les rendus suivants :

PNG - 11.6 ko
choix du locale de la langue

Choix d’une autre langue

PNG - 10.9 ko
renduValueChange2

METHODE 2 : utiliser la balise valueChangeListener

La balise ’valueChangeListener’ permet aussi de préciser un listener.

Son attribut type permet de préciser une classe implémentant l’interface ValueChangeListener.

PNG - 25.2 ko
utilisation du tag valueChangeListner

- Téléchargez le fichier complet main.xhtml ci-dessous :

Zip - 745 octets
main.xml

- Une telle classe doit définir une méthode processValueChange() qui va contenir les traitements exécutés en réponse à l’événement.

PNG - 32 ko
implémentation de l’interface

- Téléchagez le bean ChoixLangueListener.java

Zip - 881 octets
bean implémentant ValueChangeListner

Partie 2 : gestion actions

Découvrez deux façons de préciser un listener de type actionListener sur un composant de type bouton ou lien :

METHODE 1 : utiliser l’attribut actionListener

L’attribut actionListener permet de préciser une expression qui désigne une méthode qui sera exécutée durant les traitements du cycle de vie de la requête.

PNG - 21.8 ko
boutton ActionListner

— Téléchargez le zip du fichier main.xhtml

Zip - 864 octets
main.xhtml

La méthode qui réalise les traitements lors de l’interception de l’évènement attend en paramètre un objet de type ActionEvent.

PNG - 17.6 ko
btonActionBean

— Téléchargez le zip du fichier

Zip - 1 ko
CountryBean

— L’exécution de l’application sur le serveur cible Tomcat donne les rendus suivants :

PNG - 12.2 ko

METHODE 2 : utiliser la balise actionListener

— Le tag actionListener : permet aussi de préciser un listener. Son attribut type permet de préciser une classe implémentant l’interface ActionListener.

PNG - 30.8 ko

— Une telle classe doit définir la méthode processAction() définie dans l’interface.

PNG - 16.9 ko

— L’exécution de l’application sur le serveur cible Tomcat donne les rendus suivants :

PNG - 11.5 ko

INFO :
— L’attribut immediate permet de demander les traitements immédiat des listeners.

Par exemple, sur une page un composant possède un attribut required et un second possède un listener. Les traitements du second doivent pouvoir être réalisés sans que le premier composant n’affiche un message d’erreur lié à sa validation.

Le cycle de traitement de la requête est modifié lorsque l’attribut immediate est positionné dans un composant. Dans ce cas, les données du composant sont converties et validées si nécessaire puis les traitements du listener sont exécutés à la place de l’étape Process validations

Conclusion

Dans ce tutoriel, vous avez compris Le modèle de gestion des événements avec JSF et mis en œuvre les différentes techniques de gestion des événements.

Formation JSF

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur JSF : Formation JSF

PNG - 82.7 ko
programme détaillé JSF 2