Crud Jsf Jpa

Embed Size (px)

Citation preview

Cration d'une application de type CRUD avec JSF et JPApar Jawher Moussa (Accueil)Date de publication : 03/03/2008 Dernire mise jour : 24/09/2009

Cet article a pour objectif de vous prsenter la tche de cration d'une application complte de type CRUD ( Create, Read, Update, Delete ) permettant d'effectuer les oprations de cration, consultation, suppression et modification d'une entit et ce en utilisant le framework web JSF et le framework de persistance JPA .

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

I - Introduction..............................................................................................................................................................3 II - Squelette de l'application....................................................................................................................................... 4 II-A - Configuration de JSF.................................................................................................................................... 4 II-B - Configuration de JPA.................................................................................................................................... 5 II-C - Couche mtier...............................................................................................................................................5 II-C-1 - Entit.....................................................................................................................................................6 II-C-2 - DAO...................................................................................................................................................... 7 II-D - Couche contrle............................................................................................................................................8 III - Implmenter l'opration Read............................................................................................................................... 9 III-A - Dans la couche DAO................................................................................................................................... 9 III-B - Dans la couche Control............................................................................................................................... 9 III-C - Dans la couche View...................................................................................................................................9 III-D - Test.............................................................................................................................................................11 IV - Implmenter l'opration Create.......................................................................................................................... 12 IV-A - Dans la couche DAO.................................................................................................................................12 IV-B - Dans la couche Control.............................................................................................................................12 IV-C - Dans la couche View................................................................................................................................ 13 IV-D - Test............................................................................................................................................................ 14 V - Implmenter l'opration Delete............................................................................................................................17 V-A - Dans la couche DAO..................................................................................................................................17 V-B - Dans la couche Control..............................................................................................................................17 V-C - Dans la couche View................................................................................................................................. 18 V-D - Test............................................................................................................................................................. 18 VI - Implmenter l'opration Update..........................................................................................................................20 VI-A - Dans la couche DAO.................................................................................................................................20 VI-B - Dans la couche Control.............................................................................................................................20 VI-C - Dans la couche View................................................................................................................................ 21 VI-D - Test............................................................................................................................................................ 22 VII - Tlcharger........................................................................................................................................................ 25 VIII - Conclusion........................................................................................................................................................ 26 IX - Remerciements................................................................................................................................................... 27

-2Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

I - IntroductionUne application CRUD permet d'effectuer les oprations de listing, ajout, modification et suppression sur une entit donne. Ce cas d'utilisation est si frquent dans le dveloppement logiciel qu'il est rare de trouver une application qui ne fasse pas du CRUD . La mise en place d'une telle application ncessite de pouvoir effectuer les oprations CRUD sur une source de donnes (Base de donnes, fichier plat, etc.) et de fournir une interface graphique (client lourd ou web, etc.) pour raliser ces oprations. Le but de cet article est donc de prsenter et expliquer la cration d'une application web Java permettant de faire du CRUD sur une seule entit en utilisant JSF comme framework de prsentation et JPA comme framework de persistance.

-3Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

II - Squelette de l'applicationIl s'agit d'une application web Java. Si vous utilisez un EDI tel qu' Eclipse ou NetBeans , il est possible de gnrer automatiquement la structure d'une application web JSF grce aux assistants de ces EDIs . Eclipse prend en charge le dveloppement d'applications JSF via le pack Web Tools Project 2 . Les tapes de configuration d'Eclipse et de la cration d'un projet JSF sont prsentes sous forme de dmo Flash dans cet article .

II-A - Configuration de JSFCeci revient : Ajouter une implmentation JSF au classpath . Dans l'exemple fourni avec cet article, J'utilise la Sun

Reference Implementation 1.2.6 tlchargeable ici . Cette version supporte JSF 1.2. Dclarer la Faces Servlet dans web.xml et l'associer *.jsf . Cette servlet joue le rle de la Front Servlet du MVC/Model 2 . Ajouter le fichier faces-config.xml qui permet de configurer l'application JSF (dclaration des managedbeans / controllers , dclaration des rgles de navigation, etc.)

Aprs avoir dclar la Faces Servlet ainsi que son affectation aux urls de type *.jsf , voici ce que devient web.xml: jsf-crud index.jsp Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.jsf

Et voici le fichier faces-config.xml (vide pour l'instant, mais il sera mis jour au fur et mesure de l'ajout de nouvelles fonctionnalits l'application):

-4Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

II-B - Configuration de JPALa configuration de JPA consiste : Ajouter une implmentation JPA au classpath. Dans le cadre de cet article, j'utilise Toplink 2.41 comme implmentation qui est tlchargeable ici . Crer le descripteur de persistance qui sert spcifier les paramtres de connexion la base de donnes (url de connexion, login, mot de passe, etc.) ainsi qu' la dclaration des classes persistantes.

J'utilise Toplink comme implmentation JPA et HSQLDB comme base de donnes. Il faut donc mettre toplink.jar et hsqldb.jar dans le classpath de l'application. Il faut ensuite crer un descripteur de persistance JPA ( persistence.xml ) dans un dossier META-INF la racine du dossier source.

Pour l'instant, ce fichier ne contient que le nom de l'unit de persistance ( jsf-crud ) ainsi que les paramtres de connexion la base de donnes qui sont: Pilote JDBC : "org.hsqldb.jdbcDriver" URL de connexion: " jdbc:hsqldb:file:test " qui indique HSQLDB de stocker la base de donnes dans un fichier nomm " test ". Il est aussi possible de stocker la base dans la mmoire vive ( RAM ) en utilisant un chemin du type " jdbc:hsqldb:mem:test ". Mais les donnes seraient alors perdues l'arrt de l'application. Login: "sa" (l'quivalent du root dans HSQLDB ) Pilote JDBC : " org.hsqldb.jdbcDriver " toplink.ddl-generation : " create-tables " indique Toplink de crer les tables si elles n'existent pas.

II-C - Couche mtierL'application qu'on dsire dvelopper permet de faire les oprations de cration, modification, suppression et listing sur une seule entit. Normalement, la partie Model de l'application devrait tre spare en deux sous parties: DAO ( Data Access Object ) pour l'accs aux donnes et Service pour faire la logique mtier. Mais dans le cadre de cet article, on se limitera la couche DAO sans passer par la couche service vu que l'on n'a pas de logique mtier proprement parler.

-5Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

II-C-1 - EntitL'entit sur laquelle on va travailler reprsente une personne. On se contentera de deux attributs, nom et prnom. Voici son code:package model.dto; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * Cette classe reprsente une personne. C'est une entit persistente vu qu'on * l'a annot avec l'annotation Entity. * * @author djo.mos * */ @Entity public class Person { private Long id; private String firstName; private String lastName; /** * C'est l'accesseur de l'identifiant.
* On indique qu'un champ est un identifiant en l'annotant avec Id.
* De plus, si on ajoute GeneratedValue, alors c'est la base de donnes ou * l'implmentation JPA qui se charge d'affecter un identifiant unique. * * @return l'identifiant. */ @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }

}

Comme vous le remarquez, cette classe est annote avec JPA pour pouvoir tre persiste ou retrouv dans la base de donnes: L'annotation @Entity sur la classe Person pour la dclarer comme classe persistante. Cette annotation est obligatoire pour une classe persistante. L'annotation @Id sur le getter du champ id pour le dclarer comme l'identifiant. Cette annotation est obligatoire pour une classe persistante.

-6Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

L'annotation @GeneratedValue sur le getter du champ id pour dclarer qua sa valeur est auto gnre. Notez que les champs firstName et lastName ne sont pas annots. Ils seront pourtant persists car dans un souci de simplification, JPA considre que tout champ d'une classe persistante est implicitement persistant, moins qu'il soit annot avec @Transient .

Il faut ensuite dclarer cette classe dans le descripteur de persistance persistence.xml pour qu'elle soit prise en charge:model.dto.Person

II-C-2 - DAOOn va maintenant encapsuler les oprations de persistance (cration, modification, suppression et lecture) sur l'entit Person dans un DAO .package model.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Persistence; import model.dto.Person; /** * C'est le DAO qui permet d'effectuer des oprations portant sur une personne * dans la base de donnes. * * @author djo.mos * */ public class PersonDao { private static final String JPA_UNIT_NAME = "jsf-crud"; private EntityManager entityManager; protected EntityManager getEntityManager() { if (entityManager == null) { entityManager = Persistence.createEntityManagerFactory( JPA_UNIT_NAME).createEntityManager(); } return entityManager; }

}

Le DAO qu'on va dvelopper va utiliser l' API de JPA pour raliser les oprations de persistance. Pour pouvoir l'utiliser, il faut d'abord crer une instance de la classe EntityManager . Pour le faire, on passe par une fabrique ( Factory ) qu'on rcupre via la mthode statique Persistence.createEntityManagerFactory() (Je sais, encore une autre fabrique :) ) en lui passant comme paramtre le nom de l'unit de persistance (le mme dclar dans persistence.xml ):

On verra plus tard comment utiliser l' EntityManager cre pour effectuer les oprations de persistance sur une entit. Dans un souci de simplicit, la gestion de l' EntityManager dans cet article est fate la main. Mais dans la pratique, cette approche a de nombreuses limites, et on lgue la gestion de l' EntityManager un conteneur tel que le serveur d'application ou encore un conteneur-7Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

leger comme Spring . Il suffit alors d'indiquer au conteneur d'injecter l' EntityManager cre dans nos DAOs .

II-D - Couche contrleIl s'agit ici de crer un managed-bean JSF ( Controller ) qui fera le lien entre les pages et la couche mtier.package control; public class PersonCtrl { }

Il faut ensuite dclarer cette classe dans faces-config.xml pour l'exposer aux pages JSF : personCtrl control.PersonCtrl session

La dclaration d'un managed-bean JSF prend ces paramtres: managed-bean-name : Le nom sous lequel le bean sera accessible depuis les pages. En gnral, c'est le nom de la classe avec la premire lettre en minuscule (C'est ce qui est fait dans ce cas: personCtrl). Mais rien ne vous empche de le nommer comme bon vous semble. managed-bean-class : Le nom complet de la classe du managed-bean . managed-bean-scope : La dure de vie du managed-bean ( request , session , application , none ). Dans ce cas, je l'ai mis session car on aura des oprations sur plusieurs requtes.

Une fois le managed-bean dclar dans faces-config.xml , il devient alos accessible depuis les pages JSF via l' EL ( Expression Language ) " #{nomDuBean} ".

-8Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

III - Implmenter l'opration Read III-A - Dans la couche DAODans PersonDao, on ajoute une mthode selectAll qui retourne la liste de toutes les personnes depuis la base de donnes:/** * L'opration Read * @return toutes les personnes dans la base de donnes. */ public List selectAll() { List persons = getEntityManager().createQuery( "select p from Person p").getResultList(); return persons; }

Notez que l'on accde l' EntityManager via son getter pour s'assurer qu'il soit cre. Comme cit plus haut, on utilise l' EntityManager pour excuter une requte sur la base de donnes. Notez que cette requte est exprime en JPA-QL ( Java Persistence API Query Language ) et non pas en SQL . JPA-SQL est similaire SQL mais est orient Objet.

III-B - Dans la couche ControlOn doit ensuite modifier le contrleur pour offrir aux pages JSF la possibilit de lister les entits personnes. Dans la classe PersonCtrl , on ajoute une liste de personnes (pour stocker les personnes rcupres de la base de donnes) ainsi qu'une instance du DAO qu'on a cre (pour pouvoir excuter les oprations de persistance sur la base de donnes):private PersonDao pDao = new PersonDao(); private List persons;

Pour initialiser cette liste, mieux vaut viter de le faire dans le constructeur du managed-bean vu que l'on n'est pas sr de l'ordre d'initialisation des diffrents modules, et qu'il se peut que ce constructeur soit appel alors que JPA ne soit pas encore initialis. On va donc diffrer l'initialisation de cette liste dans son getter, de cette faon:public List getPersons() { if(persons==null){ persons = pDao.findAll(); } return persons; }

JSF accde toujours aux champs d'un managed-bean via les accesseurs et les mutateurs. On est donc sr de passer par getPersons en la rfrenant depuis JSF via " #{personCtrl.persons} ".

III-C - Dans la couche ViewOn va maintenant afficher la liste des personnes dans une page JSF dans un format tabulaire. On cre une page list.jsp avec le contenu suivant:-9Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

On utilise le composant standard dataTable pour afficher la liste des personnes. Ce composant prend entre autre les paramtres suivants: value : une EL dsignant la liste afficher. Dans ce cas, on dsire afficher la liste des personnes dfinies dans le managed-bean PersonCtrl. var : dataTable va itrer sur la liste dclare dans l'attribut value. A chaque itration, l'lment courant est mis dans une variable temporaire dont le nom est contrl par la valeur de l'attribut var . border et rules sont utilises pour configurer l'affichage (pas de bordure, afficher des lignes autour de chaque cellule)

A l'inverse des autres taglibs ( Struts , JSTL , etc.), le modle de composants de JSF introduit une abstraction lors de l'itration sur une liste de donnes en dfinissant les colonnes au lieu des lignes. Ici, on dfinit 2 colonnes: Une colonne pour afficher les prnoms des personnes: Ceci est fait via le composant column . Ce dernier rpte son contenu chaque itration sur la liste dfinie dans le dataTable parent. Dans ce cas, le contenu de column qui est le composant outputText (qui permet d'afficher du texte) sera rpt pour chaque personne de la liste des personnes dans une ligne de la table. outputText prend un attribut value qui indique le texte afficher. Ici, on a mis l' EL #{p.firstName} o p est la variable d'itration (dclare dans l'attribut var du dataTable parent) qui est une instance de Person . Le sous composant facet permet de dfinir une sous partie du composant parent ( column ) et ne sera pas rpt pour chaque itration. Ici, le facet dfinit le contenu de l'entte de la colonne qui est le texte " Prnom ". Une autre colonne pour afficher les noms des personnes. elle est dfinie de la mme faon que la premire colonne.

Il faut aussi crer une page index.jsp dont voici le contenu:

index.jsp est la page d'accueil vu qu'on l'a dclar dans web.xml. Pour pouvoir accder une page JSF , il faut utiliser le suffixe .jsf . C'est pour cette raison qu'on passe par l'lment forward qui permet de rfrence la page JSF avec le suffixe .jsf .

- 10 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

III-D - TestEn excutant l'application, rien d'utile dans l'affichage vu qu'on n'a pas encore de donnes, il faut juste s'assurer qu'il n'y ait pas eu d'exceptions au dmarrage. Mais en suivant le log de l'application (dans la console d' Eclipse par exemple), on voit :[TopLink Fine]: 2007.12.02 12:10:28.968 --ServerSession(3273383) --Connection(15513215)--Thread(Thread[http-8080-2,5,main]) --CREATE TABLE PERSON (ID NUMERIC(19) NOT NULL, LASTNAME VARCHAR(255), FIRSTNAME VARCHAR(255), PRIMARY KEY (ID)) : : [TopLink Fine]: 2007.12.02 12:10:29.318--ServerSession(3273383) --Connection(15513215) --Thread(Thread[http-8080-2,5,main]) --SELECT ID, LASTNAME, FIRSTNAME FROM PERSON

Ce qui montre que Toplink a cre la table PERSON dans la base de donnes et qu'il a ensuite effectu un SELECT lors de l'affichage de la table. Vous pouvez voir la page de listing en action sur cette adresse : list.jsf (dmo hberg sur Developpez.com)

- 11 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

IV - Implmenter l'opration Create IV-A - Dans la couche DAODans PersonDao , on ajoute la mthode suivante:/** * L'opration Create * @param u La personne insrer dans la base de donnes. * @return La personne insre */ public Person insert(Person u) { getEntityManager().getTransaction().begin(); getEntityManager().persist(u); getEntityManager().getTransaction().commit(); return u; }

Cette mthode fait appel l' API de JPA pour persister une personne dans la base de donnes.

Comme vous le remarquez, j'ai entour l'opration persist par une ouverture d'une transaction et par son commit. C'est une trs mauvaise ide de s'y prendre de cette faon, i.e. grer les transactions au niveau du DAO . Dans une application relle, on a en gnral plusieurs oprations qui doivent se raliser d'une faon atomique. Par exemple: on ajoute une entit dans la base de donnes et on ajoute un lien vers cette entit dans une autre table. Ces deux oprations doivent se raliser d'une faon atomique. C'est justement la raison d'tre des transactions. Or puisque les DAO offrent des fonctionnalits unitaires ( create , update , etc.), il faut plutt implmenter les transactions dans la couche Service et optimalement d'une faon dclarative en utilisant Spring par exemple. Cette remarque vaut aussi pour les oprations update et delete .

IV-B - Dans la couche ControlDans PersonCtrl , on ajoute un champ de type Person qui servira recueillir les informations de l'utilisateur.private Person newPerson = new Person();

On ajoute aussi l'action createPerson dans le contrleur PersonCtrl qui utilise le DAO et l'instance newPerson pour ajouter une personne dans la base de donnes. Cette action doit tre associe un submit dans la page JSF d'ajout d'utilisateur.public String createPerson() { pDao.insert(newPerson); newPerson = new Person(); persons = pDao.selectAll(); return "list"; }

- 12 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

Cette mthode ne fait qu'appeler la mthode insert du DAO . Ensuite, elle cre nouveau newPerson pour la prochaine insertion. Enfin, elle met jour la liste des personnes pour reflter l'ajout de la nouvelle personne. Pour retourner la page de listing suite la cration d'une personne, l'action doit retourner un littral (" list " par exemple dans ce cas). On doit ensuite ajouter une rgle de navigation qui part de la page d'ajout d'une personne add.jsp et mne vers list.jsp suite un rsultat " list " dans faces-config.xml : add /add.jsp list /list.jsp

Une rgle de navigation JSF se configure ainsi: l'lment from-view-id : le nom de la page source. navigation-case : cas de navigation: from-outcome : le littral qui active ce cas de navigation to-view-id : o aller si ce cas de navigation est activ. redirect : un lment optionnel qui s'il est prsent, le cas de navigation effectue un redirect au lieu d'un forward . Il est possible de dclarer plusieurs cas de navigation dans la mme rgle de navigation. On peut voir a comme ceci: les cas de navigation sont groups par la page de dpart dans une rgle de navigation.

IV-C - Dans la couche ViewOn cre une page add.jsp , qui permet de saisir les donnes d'une nouvelle personne et d'invoquer l'action createPerson :

Quelques notes: J'ai utilis le composant panelGrid qui permet d'aligner ses fils en une grille pour la mise en page. Ici, j'ai dfini 3 colonnes. J'ai utilis le composant inputText qui permet de rcuprer une valeur textuelle.

- 13 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

L'attribut value de ce composant permet d'associer sa valeur avec un champ d'un managed-bean via une EL . Ici, je lie le premier champ textuel avec le champ firstName de personCtrl . newPerson et le second avec le champ lastName . J'ai ajout des contraintes required=true pour les deux champs texte (nom et prnom) pour indiquer JSF que leurs valeurs ne peuvent pas tre vides ainsi que des lments message pour afficher les messages d'erreur en cas d'erreur de validation. Enfin, un commandButton pour invoquer l'action PersonCtrl . createPerson (spcifi via une EL dans l'attribut action ).

Pour simplifier la navigation entre les deux pages add.jsp et list.jsp , on va ajouter un menu dans les deux pages dont voici le code:

Ce ne sont que deux liens hypertexte dans une grille de 2 colonnes. Ce menu est mettre dans les deux pages add.jsp et list.jsp au tout dbut de la page juste aprs le composant .

IV-D - TestOn effectue un test en ajoutant quelques personnes: Initialement la liste est vide:

Liste vide

- 14 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

En cliquant sur le lien "Ajouter", on passe la page d'ajout:

Page d'ajout d'une personne Aprs avoir rempli et valid le formulaire, on revient la liste des personnes:

Liste avec la personne ajoute- 15 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

Vous pouvez tester l'opration de cration sur cette adresse : add.jsf (dmo hberg sur Developpez.com)

- 16 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2009 - djo.mos. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://djo-mos.developpez.com/tutoriels/java/crud-jsf-jpa/

Cration d'une application de type CRUD avec JSF et JPA par Jawher Moussa (Accueil)

V - Implmenter l'opration Delete V-A - Dans la couche DAOOn commence par ajouter une mthode delete PersonDao :/** * L'opration Delete * @param u La personne supprimer de la base de donns. */ public void delete(Person u) { getEntityManager().getTransaction().begin(); u = getEntityManager().merge(u);//