Framework Java Server Faces (JSF)

Présentation

JSF, alias "Java Server Faces" est un framework de type MVC, destiné aux applications web respectant l'architecture J2EE.

Le premier objectif de JSF, est de procurer un environnement de développement permettant de construire une interface de type web, sans devoir toucher au code HTML et JavaScript. Ceci est réalisé par la mise en place d'un mapping entre l'HTML et les objets concernés. JSF est donc basé sur la notion de composants, comparable à celle de Swing, ou l'état de ces composants est sauvegardé puis restauré au retour de la requête.

Il existe 2 implémentations de JSF :

Le principal atout de JSF est qu’il tient compte des différentes expériences acquises non seulement avec des technologies de type standard comme les Servlets, les JSP,… mais aussi avec les technologies de type framework comme Struts. Dès lors, JSF propose un framework qui puisse être mis en oeuvre par des outils facilitant le développement d’applications web. Rien n’empêche cependant que JSF puisse être utilisé par codage à la volée, néanmoins, l’utilisation d’un outil approprié est vivement recommandé afin d’exploiter rapidement les possibilités de JSF.

JSF permet :

Il existe plusieurs frameworks webs Java dédiés au développement d'interfaces utilisateur mais aucun n'est un standard et va aussi loin que JSF.

Comparaison entre JSF et struts

Nous savons que JSF et Struts sont tous les deux des framework MVC.

Mais alors lequel de ces deux framework est-il préférable d'utiliser pour écrire une application web?

Il faut s'avoir que Struts et JSF n’ont pas le même champ d’action.
JSF est orienté view controler alors que Struts est plus orienté action controler. Donc ces deux frameworks sont complémentaires.

Le problème est que chacun empiète sur le terrain de l’autre. A savoir que Struts propose des tag libs pour les vues et une définition de la navigation au travers des pages. De son côté JSF supprime la notion de servlet grâce aux managed beans et propose l’aide à la réalisation de contrôle de formulaire.

Pour conclure, JSF offre une mise en place beaucoup plus simple et rapide.
La maturité de Struts lui permet de fournir des outils dont il est difficile de s’en passer quand on a l’habitude de les utiliser.
Pour les nouveaux projets, il vaut mieux partir sur du JSF. Par contre, pour les projets existant, il est préférable de garder Struts.

Installation

Tout d'abord nous allons installer et configurer JSF pour nos projets. Nous nous plaçons dans une optique d'une installation et exploitation sur Eclipse.
Vous devez télécharger les librairies JSF, que vous pouvez trouvez ci-dessous, dans la section ressources.
Veuillez suivre les étapes suivantes afin de configurer votre projet correctement. Un tutorial en vidéo se trouve
ici, et montre bien les étapes à suivre que nous résumons ci-dessous.

  1. Enrengistrer vos librairies JSF (Window > Preferences > Web and XML > JavaServer Faces Tools > Librairies > New)
  2. Créer un projet Web dynamique (Dynamic Web Project)
  3. Créer une page JSP
  4. Définissez les paramètres de navigation
  5. Créer des beans
  6. Editer vos fichiers JSF grâce à l'éditeur de page Web
  7. Déployer et éxecuter votre application

Si tout c'est bien passé vous êtes prêt à travailler sur votre projet JSF.

Configuration

Nous allons maintenant voir comment configurer votre projet dans votre application. Il y a 2 fichiers de configurations pour JSF.

web.xml

Le web.xml qui permet de définir l'emplacement des pages JSP, ainsi que de possible contraintes de sécurité concernant l'accès à des pages. Il établit également l'endroit ou se situe le Faces Servlet. Faces Servlet, est la classe, qui est le moteur de chaque applications JSF. Chaque application JSF à sa propre Faces Servlet, qui gère toutes les informations relatives à la requête courante.
Voici un exemple de fichier web.xml, qui est normalement créer à la génération du projet sous Eclipse.

Code : Fichier de configuration [web.xml]

faces-config.xml

Le faces-config.xml, est le fichier de configuration, qui permet de gérer les beans, et les règles de navigation entre les pages. Vous pouvez aperçevoir, ci-dessous un bref, exemple de fichier de configuration.

Code : Fichier de configuration [faces-config.xml]

Voici une description plus détaillé des champs afin de vous aider à configurer au mieux vos fichiers de mapping.

<managed-bean>
managed-bean-name Le nom du bean
managed-bean-class La classe associé au bea
managed-bean-scope Le scope du bean (session, request ...)
<navigation-rule>
display-name Le nom d'affichage de la page
from-view-id La page d'entrée avec la vue initial
<navigation-case>
from-outcome L'issue du traitement de la page
to-view-id La vue issue de la page finale

Afin de créer ce fichier vous pouvez vous aider grâce à l'éditeur JSF inclus dans Eclipse. Il facilite la création de ce fichier, grâce à une interface graphique comme on peut le voir ci-dessous.
L'image ci-dessous montre la gestion de la navigation dans l'application.

faces_config.xml

Exemples

Nous allons voir ici, un exemple de fichier JSF. Les composants étant nombreux nous ne pouvons vous fournir un détail précis, mais le site officiel fournit une documentation complète des composants JSF.
Etant donné que vous pouvez également créer vos propres composants, une liste serait inutile.

Comme nous l'avons dit précédemment, JSF est orienté composant, c'est à dire que beaucoup d'information sont contenus dans ceux-ci. Un composant peut avoir des validators et/ou des convertors.
Les validators, permettent de valider la donnée inseré en respectant une certaine forme, souvent vérifié par des regex.
Les convertors, permettent de convertir des données selon un format donnée.

Comme on peut voir dans l'exemple ci-dessous, la vue englobe tout les composants, et la vue peut également être composé de sous-vue, qui peuvent être modifiable, et que l'on redirige grâce au fichier de configuration faces-config.xml.

Code : Fichier d'exemple de fichier JSF [Exemple]

Vous pouvez donc créer avec liberté autant de composant que vous voulez, grâce à ce framework.

Ressources :

- Librairie JSF
- WAR d'exemple de JSF [Gestion de librairie et de livres]
- WAR d'exemple de JSF [Gestion de contacts en ligne]
- Slide de présentation sur JSF / Castor

Bibliographie


HAGUET Alexandre | PERRAUDIN Steven | VIGNIER Fabrice