CLUB FUTUR ENTREPRENEUR EN MULTIMEDIA

Développement des applications Web avec Spring, hibernate et Richfaces.
Rédigé par DGHAIES Jihed
Ingénieur en informatique, technologie web et multémidia

2010
Ce tutoriel a pour but de développer une application web CRUD à trois couches (présentation, métier, accès aux données) avec la plateforme JEE (Java Enterprise Edition) que nous construisons avec les technologies suivantes : - JavaServer Faces(JSF) et RichFaces : pour les interfaces web, - Java Beans: pour la couche métier - Hibernate, Spring : pour la couche d'accès aux données. L'application sera développée avec l'éditeur netbeans 6.5.1 et sera déployé sur le serveur apache tomcat 6.0.18. Le document contient beaucoup de code rendant possible le copier / coller.

1

Dghaies jihed – Tutoriel développement des applications web J2EE

http://cfem.ifrance.com

Sommaire
I. But de Tutoriel ............................................................................................................................ 3 II. Structure de la base de données ................................................................................................ 3 III. Création du Projet ...................................................................................................................... 4 IV. Création des Interfaces Graphiques ........................................................................................... 8 1. Page Authentification .............................................................................................................. 8 2. Page entête ............................................................................................................................. 9 3. Page Menu............................................................................................................................. 10 4. Page Services ......................................................................................................................... 11 5. Page Personnel ...................................................................................................................... 13 6. Page Equipement .................................................................................................................. 15 7. Page interventions................................................................................................................. 17 V. Génération des fichiers de mapping ........................................................................................ 19 VI. Intégration de Spring ................................................................................................................ 26 1. Ajout de la librairie Spring ..................................................................................................... 26 2. Création du fichier de configuration ..................................................................................... 27 3. Création de la couche Service et la couche DAO................................................................... 30 VII. Création des « managed Beans » ............................................................................................. 37 1. Managed Bean pour la Classe Service ................................................................................... 37 2. Liaison avec la page Service .................................................................................................. 40 3. Managed Bean pour la Classe Personnel .............................................................................. 42 4. Liaison avec la page Personnel .............................................................................................. 45 5. Managed Bean pour la Classe Equipement ........................................................................... 47 6. Liaison avec la page Equipement .......................................................................................... 50 7. Managed Bean pour la Classe Interventions ......................................................................... 52 8. Liaison avec la page Interventions ........................................................................................ 56 9. Fichier de confiuration « Faces-config »................................................................................ 58 10. Diagramme de l’aplication .................................................................................................... 59 VIII. Gestion de l’accés à l’aplication ............................................................................................... 60 1. Changement de la page d’aceuil ........................................................................................... 60 2. Création du bean «AuthenticationBean » ............................................................................. 61 3. Liaison avec la page Authentification ................................................................................... 63 4. Ajout des « navigation rules » ............................................................................................... 64 5. Changement de la page entete ............................................................................................. 65 IX. Deploiement de l’application ................................................................................................... 66 1. Création du fichier war .......................................................................................................... 66 2. Déployer l'application............................................................................................................ 66

2

Dghaies jihed – Tutoriel développement des applications web J2EE

I.

But de Tutoriel

Le but de ce tutoriel est de créer une application web pour la gestion d’un parc informatique en utilisant la plateforme J2EE avec les frameworks JSF, Richfaces, Hibernate et Spring. Les interfaces graphiques (couche présentation) seront crées avec JSF et RichFaces, la couche métier et la couche accès au données seront crées avec Spring et Hibernate. La base de données étant une base MySQL composée de 4 tables : équipement, intervention, personnel et service.

II.

Structure de la base de données

-- Base de données: `gestion_parc` -- Structure de la table `service` CREATE TABLE `service` ( `serv_code` char(3) NOT NULL default '', `serv_lib` varchar(25) NOT NULL default '', `serv_descr` text, PRIMARY KEY (`serv_code`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Structure de la table `equipement` CREATE TABLE `equipement` ( `eq_id` int(3) NOT NULL auto_increment, `eq_lib` varchar(25) NOT NULL default '', `eq_etat` varchar(12) default NULL, `eq_descr` text, `eq_serv` char(3) NOT NULL default '', PRIMARY KEY (`eq_id`), KEY `eq_serv` (`eq_serv`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- Structure de la table `personnel` CREATE TABLE `personnel` ( `pers_id` int(3) NOT NULL auto_increment,

3

Dghaies jihed – Tutoriel développement des applications web J2EE

netbeans. KEY `pers_serv` (`pers_serv`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 . 3) Ouvrir NetBeans puis dans l’onglet « tools » choisir « plugins ».jsp?pluginid=8934 Le fichier téléchargé est un fichier ZIP qui contient 2 fichiers .`pers_nom` varchar(15) NOT NULL default ''. `pers_prenom` varchar(15) NOT NULL default ''. -. KEY `interv_eq` (`interv_eq`). ADD CONSTRAINT `interventions_ibfk_1` FOREIGN KEY (`interv_pers`) REFERENCES `personnel` (`pers_id`). `pers_password` varchar(6) NOT NULL default ''. KEY `interv_pers` (`interv_pers`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 .nbm (module pour NetBeans) 2) Décompresser l’archive zip pour extraire ces 2 fichiers. III. 4 Dghaies jihed – Tutoriel développement des applications web J2EE . `pers_droit` varchar(5) NOT NULL default ''. -.Contraintes pour la table `equipement` ALTER TABLE `equipement` ADD CONSTRAINT `equipement_ibfk_1` FOREIGN KEY (`eq_serv`) REFERENCES `service` (`serv_code`).Contraintes pour la table `personnel` ALTER TABLE `personnel` ADD CONSTRAINT `personnel_ibfk_1` FOREIGN KEY (`pers_serv`) REFERENCES `service` (`serv_code`).Contraintes pour les tables exportées -. `interv_date` date NOT NULL default '0000-00-00'. PRIMARY KEY (`interv_id`). `interv_eq` int(3) NOT NULL default '0'. `pers_serv` char(3) NOT NULL default ''. PRIMARY KEY (`pers_id`). Création du Projet Pour pouvoir utiliser RichFaces il faut ajouter ce plugin à NetBeans 1) Télécharger le plugin RichFaces pour NetBeans à partir de cette adresse: http://plugins. `pers_login` varchar(8) NOT NULL default ''.org/PluginPortal/faces/PluginDetailPage. -.Contraintes pour la table `interventions` ALTER TABLE `interventions` ADD CONSTRAINT `interventions_ibfk_2` FOREIGN KEY (`interv_eq`) REFERENCES `equipement` (`eq_id`). `interv_pers` int(3) NOT NULL default '0'. -.Structure de la table `interventions` CREATE TABLE `interventions` ( `interv_id` int(3) NOT NULL auto_increment.

5 Dghaies jihed – Tutoriel développement des applications web J2EE .3. Le fichier téléchargé est un fichier zip qui contient la documentation technique de l’api ainsi que les librairies RichFaces (3 fichier . 5) Télécharger la dernière version stable de RichFaces (RichFaces 3.jar dans le dossier lib).4) Dans l’onglet « downloaded » cliquer sur « add plugin » et spécifier le chemin des 2 fichiers qu’on a décompressé dans l’étape 2 puis cliquer sur « Install ».org/richfaces/download/stable.2. Créer un nouveau projet : Choisir java webweb application Donner un nom à votre projet.SR1) à partir de cette adresse : http://www.html.jboss.

Spécifier le serveur à utiliser (Apache tomcat) et la version de JAVA EE (JAVA EE 5). Choisir les Framework JSF et Richfaces puis cliquer sur « Finish » 6 Dghaies jihed – Tutoriel développement des applications web J2EE .

xml vous constatez que netbeans à généré automatiquement les configurations nécessaires pour que notre application web supporte JSF et il a créé aussi une page « welcomeJSF. Si vous ouvrez le fichier web. Pour le moment on va utiliser seulement les frameworks JSF/Richfaces pour concevoir les interfaces graphiques de notre application. Dans cet onglet on trouve les libraries utilisées dans notre projet on sélectionne la librairie RichFaces puis on clique sur « edit ».richfaces » contenant un managed bean appelé « RichFacesBean». Dans les propriétés du projet (bouton droitpropriétés) on choisit « Libraries ».my. 7 Dghaies jihed – Tutoriel développement des applications web J2EE . Le plugin richfaces qu’on a installé ne contient pas les 3 jars nécessaires pour faire fonctionner les pages RichFaces donc on doit les ajouter manuellement.jsp » et un package « org.Maintenant vous avez crée votre premier projet Web.xml et le fichier faces-config.

Clique ensuite sur « add jar/folder » et choisir les 3 fichiers .Page entête . 2010. 21:30:57 Author : jihed --%> 8 Dghaies jihed – Tutoriel développement des applications web J2EE .Page Authentification .page Personnel . Page Authentification h:inputText Rich :panel h:outputText h:inputSecret a4j:commandButtonnp utSecret Code de la page <%-Document : Authentification Created on : 25 janv.page Menu .jar contenu dans le fichier ZIP qu’on a téléchargé dans l’étape 5. IV.page équipement . Création des Interfaces Graphiques .page personnel Cette application sera constituée de 7 pages Web : 1.page Service .

01 Transitional//EN" "http://www. interventions.w3.width:400px.org/TR/html4/loose. équipement et personnel Code de la page <%-Document : Entete Created on : 25 janv.01 Transitional//EN" "http://www.w3.sun.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.gif"> <rich:toolTip showDelay="500"> Acceuil </rich:toolTip> </a4j:commandButton> 9 Dghaies jihed – Tutoriel développement des applications web J2EE .externalContext.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. 21:47:07 Author : jihed --%> <%@taglib uri="http://richfaces. .com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.org/TR/html4/loose.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.sun. background-repeat:no-repeat.requestContextPath}/images/ajax/userauth." header="Authentification" styleClass="panel_3"> <h:panelGrid columns="3"> <h:outputText value="Login:" /> <h:inputText id="log" value="" required="true" requiredMessage="champs obligatoire" /> <rich:message for="log" style="color: red"/> <h:outputText value="Mot de passe :" /> <h:inputSecret id="mdp" value="" required="true" requiredMessage="champs obligatoire" /> <rich:message for="mdp" style="color: red"/> </h:panelGrid> <rich:spacer height="30px"></rich:spacer> <a4j:commandButton value ="Connexion" /> </rich:panel> </center> </body> </html> </f:view> 2.<%@taglib uri="http://richfaces.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.dtd"> <h:panelGrid columns="10" > <h:outputText id="dtjr" value="" styleClass="titre_gris"/> <rich:spacer width="275px"/> <h:outputText id="cnum" value="" styleClass="titre_bleu"/> <rich:spacer width="6px"/> <h:outputText value=" | " styleClass="titre2"/> <rich:spacer width="6px"/> <h:outputText id="nomuser" value="" styleClass="titre_bleu"/> <rich:spacer width="275px"/> <h:outputText value="" styleClass="titre_gris"/> <h:form> <h:panelGrid columns="3"> <a4j:commandButton image="/images/ajax/home.png). Page entête La page entête sera inclut dans les Pages : service.background-position:-35px -15px.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.sun. 2010. charset=UTF-8"> <title>Authentification</title> </head> <body > <rich:spacer height="200px"></rich:spacer> <center > <rich:panel style="background-image:url(#{facesContext.

href='/TP-JSF/faces/Service.location.jsp'"/> </rich:dropDownMenu> <rich:dropDownMenu> <f:facet name="label"> <h:panelGrid cellpadding="0" cellspacing="0" columns="1" style="vertical-align:middle"> <h:outputText value="Interventions" /> </h:panelGrid> </f:facet> <rich:menuItem submitMode="none" value="Gestion Interventions" onclick="document.com/jsf/html"%> <rich:toolBar itemSeparator="line" height="20px"> <rich:dropDownMenu> <f:facet name="label"> <h:panelGrid cellpadding="0" cellspacing="0" columns="5" style="vertical-align:middle"> <h:outputText value="Services"/> </h:panelGrid> </f:facet> <rich:menuItem submitMode="none" value="Gestion service" onclick="document.href='/TP-JSF/faces/Personnel. équipement et personnel Code de la page <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://richfaces.location.sun.jsp'"/> </rich:dropDownMenu> <rich:dropDownMenu> <f:facet name="label"> <h:panelGrid cellpadding="0" cellspacing="0" columns="5" style="vertical-align:middle"> <h:outputText value="Equipements" /> </h:panelGrid> </f:facet> <rich:menuItem submitMode="none" value="Gestion Equipements" onclick="document.href='/TP-JSF/faces/Interventions.<rich:spacer width="2px"/> <a4j:commandButton id="dec_btn" image="/images/ajax/lock.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.jsp'"/> </rich:dropDownMenu> <rich:dropDownMenu> <f:facet name="label"> <h:panelGrid cellpadding="0" cellspacing="0" columns="5" style="vertical-align:middle"> <h:outputText value="Personnel" /> </h:panelGrid> </f:facet> <rich:menuItem submitMode="none" value="Gestion Personnel" onclick="document.location.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.jsp'"/> </rich:dropDownMenu> </rich:toolBar> 10 Dghaies jihed – Tutoriel développement des applications web J2EE .gif"> <rich:toolTip showDelay="500"> Déconnexion </rich:toolTip> </a4j:commandButton> </h:panelGrid> </h:form> </h:panelGrid> 3. Page Menu La page entête sera inclut dans les Pages : service.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.href='/TP-JSF/faces/Equipement.location. interventions.

style.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.richfaces.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html."> <rich:tab label="Services"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Services" > <rich:dataTable onRowMouseOver="this.sun.backgroundColor='#{org.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java. Page Services rich :dataTable Code de la page <%-Document : Service Created on : 12 déc.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.org/TR/html4/loose.jsp"/> <a4j:include viewId="menu.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="serv"> <rich:column> <f:facet name="header"> <h:outputText value="Code" /> 11 Dghaies jihed – Tutoriel développement des applications web J2EE . 2009.style. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.w3.sun.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.backgroundColor='#B5CEFD'" onRowMouseOut="this.css"/> <title>Service</title> </head> <body> <h:form id="formservice"> <a4j:include viewId="Entete.style.01 Transitional//EN" "http://www.tableBackgroundColor}'" onRowClick="this.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px.SKIN.4. 23:46:35 Author : jihed --%> <%@taglib uri="http://richfaces.

png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Code Service : " /> <h:inputText id="codserv" value=""size="25" maxlength="30"> </h:inputText> <h:outputText value="Libellé : " /> <h:inputText value="" id="libserv" size="25" maxlength="30" /> <h:outputText value="Description : " /> <h:inputText id="descrserv" value="" size="25" maxlength="50" /> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvserv" value="Nouveau" style="width:85px"/> <a4j:commandButton id="modifserv" value="Modifier" style="width:85px"/> <a4j:commandButton id="suppserv" value="Supprimer" style="width:85px"/> <a4j:commandButton id="validserv" value="Valider" style="width:85px"/> <a4j:commandButton id="annulserv" value="Annuler" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 12 Dghaies jihed – Tutoriel développement des applications web J2EE .</f:facet> <h:outputText value="" /> </rich:column> <rich:column width="230px"> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink > <h:graphicImage style="border:0"url="/images/ajax/edit16.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink onclick="if(confirm('Voulez vous confirmer la suppression?') == false ) return false." > <h:graphicImage style="border:0" url="/images/ajax/delete16.

org/TR/html4/loose.css"/> <title>Personnel</title> </head> <body> <h:form id="formpersonnel"> <a4j:include viewId="Entete.sun. 2010.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px.backgroundColor='#B5CEFD'" onRowMouseOut="this."> <rich:tab label="Personnel"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Personnel" > <rich:dataTable onRowMouseOver="this. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.jsp"/> <a4j:include viewId="menu.sun.richfaces.tableBackgroundColor}'" onRowClick="this.style.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.backgroundColor='#{org.01 Transitional//EN" "http://www. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.style.style.SKIN.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="pers"> <rich:column> <f:facet name="header"> 13 Dghaies jihed – Tutoriel développement des applications web J2EE .5.w3. Page Personnel rich:comboBox h:selectOneRadio Code de la page <%-Document : Personnel Created on : 25 janv.

" > <h:graphicImage style="border:0" url="/images/ajax/delete16.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink onclick="if(confirm('Voulez vous confirmer la suppression?') == false ) return false.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Nom : " /> <h:inputText id="nompers" value="" size="25" maxlength="30"> </h:inputText> <h:outputText value="Prénom : " /> <h:inputText value="" id="prepers" size="25" maxlength="30" /> <h:outputText value="Login : " /> <h:inputText id="logpers" value="" size="25" maxlength="50" /> <h:outputText value="Password : " /> <h:inputSecret id="pwdpers" value="" size="25" maxlength="50" /> <h:outputText value="Droit : " /> <h:selectOneRadio id="drpers" value="" disabled=""> <f:selectItem itemLabel="Utilisateur" itemValue="user" /> <f:selectItem itemLabel="Administrateur" itemValue="admin" /> </h:selectOneRadio> <h:outputText value="Service : " /> <rich:comboBox id="servpers" defaultLabel="Entrez une valeur" value="" required="true"> </rich:comboBox> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvpers" value="Nouveau" style="width:85px"/> <a4j:commandButton id="modifpers" value="Modifier" style="width:85px"/> <a4j:commandButton id="supppers" value="Supprimer" style="width:85px"/> <a4j:commandButton id="validpers" value="Valider" style="width:85px"/> 14 Dghaies jihed – Tutoriel développement des applications web J2EE .<h:outputText value="Nom" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Prénom" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Login" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Droit" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink > <h:graphicImage style="border:0"url="/images/ajax/edit16.

sun.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.jsp"/> <a4j:include viewId="menu.sun.css"/> <title>Equipement</title> </head> <body> <h:form id="formequipement"> <a4j:include viewId="Entete. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java. Page Equipement h: inputTextarea Code de la page <%-Document : Equipement Created on : 25 janv.<a4j:commandButton id="annulpers" value="Annuler" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 6."> <rich:tab label="Equipement"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Equipement" > 15 Dghaies jihed – Tutoriel développement des applications web J2EE . 2010.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.org/TR/html4/loose.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px.w3.01 Transitional//EN" "http://www.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.

<rich:dataTable onRowMouseOver="this." > <h:graphicImage style="border:0" url="/images/ajax/delete16.style.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="equip"> <rich:column> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Etat" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Service" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink > <h:graphicImage style="border:0"url="/images/ajax/edit16.richfaces.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Libellé : " /> <h:inputText id="libquip" value="" size="25" maxlength="30"> </h:inputText> <h:outputText value="Description : " /> <h:inputTextarea value="" id="descrequip" rows="3" /> <h:outputText value="Etat : " /> <h:selectOneRadio id="etatequip" value="" > <f:selectItem itemLabel="Fonctionnel" itemValue="1" /> <f:selectItem itemLabel="En Panne" itemValue="0" /> </h:selectOneRadio> <h:outputText value="Service : " /> <rich:comboBox id="servequip" defaultLabel="Entrez une valeur" value="" required="true"> </rich:comboBox> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvequip" value="Nouveau" style="width:85px"/> <a4j:commandButton id="modifequip" value="Modifier" style="width:85px"/> <a4j:commandButton id="suppequip" value="Supprimer" style="width:85px"/> <a4j:commandButton id="validequip" value="Valider" style="width:85px"/> <a4j:commandButton id="annulequip" value="Annuler" style="width:85px"/> </h:panelGrid> </rich:tab> 16 Dghaies jihed – Tutoriel développement des applications web J2EE .backgroundColor='#B5CEFD'" onRowMouseOut="this.tableBackgroundColor}'" onRowClick="this.backgroundColor='#{org.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink onclick="if(confirm('Voulez vous confirmer la suppression?') == false ) return false.SKIN.style.style.

richfaces.tableBackgroundColor}'" onRowClick="this.SKIN.sun.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.org/TR/html4/loose.01 Transitional//EN" "http://www.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.style.css"/> <title>Intervention</title> </head> <body> <h:form id="formintervention"> <a4j:include viewId="Entete.jsp"/> <a4j:include viewId="menu. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.</rich:tabPanel> </center> </h:form> </body> </html> </f:view> 7. 2010.style.style.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="interv"> <rich:column> 17 Dghaies jihed – Tutoriel développement des applications web J2EE ."> <rich:tab label="Intervention"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Interventions" > <rich:dataTable onRowMouseOver="this.sun.backgroundColor='#{org. Page interventions rich : calendar Code de la page <%-Document : Intervention Created on : 25 janv. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.w3.backgroundColor='#B5CEFD'" onRowMouseOut="this.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.

png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink onclick="if(confirm('Voulez vous confirmer la suppression?') == false ) return false." > <h:graphicImage style="border:0" url="/images/ajax/delete16.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Equipement : " /> <rich:comboBox id="eqpinterv" defaultLabel="Entrez une valeur" value="" required="true"> </rich:comboBox> <h:outputText value="Intervenant : " /> <rich:comboBox id="persinterv" defaultLabel="Entrez une valeur" value="" required="true"> </rich:comboBox> <h:outputText value="Date intervention : " /> <rich:calendar id="foFiscal" value="" popup="true" datePattern="dd/MM/yyyy" cellWidth="24px" cellHeight="22px" /> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvinterv" value="Nouveau" style="width:85px"/> <a4j:commandButton id="modifinterv" value="Modifier" style="width:85px"/> <a4j:commandButton id="suppinterv" value="Supprimer" style="width:85px"/> <a4j:commandButton id="validinterv" value="Valider" style="width:85px"/> <a4j:commandButton id="annulinterv" value="Annuler" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 18 Dghaies jihed – Tutoriel développement des applications web J2EE .<f:facet name="header"> <h:outputText value="Equipement" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Intervenant" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Date" /> </f:facet> <h:outputText value="" > <f:convertDateTime pattern="dd/MM/yyyy" /> </h:outputText> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink > <h:graphicImage style="border:0"url="/images/ajax/edit16.

On commencera par la création de fichier de configuration d’Hibernate « hibernate. Génération des fichiers de mapping Après avoir crée les interfaces graphiques de notre application on va générer les fichiers de mapping et les classes entité de notre projet.V.cfg.xml » 19 Dghaies jihed – Tutoriel développement des applications web J2EE .

20 Dghaies jihed – Tutoriel développement des applications web J2EE .

cfg. 21 Dghaies jihed – Tutoriel développement des applications web J2EE .utilisateur.xml » sera crée dans le package par défaut « default package » ce fichier contient les paramètres de connexion à la base(dialecte. pilote de la base de données . mot de passe) Les librairies de Hibernate ainsi que le driver de MySQL seront ajoutées automatiquement dans la configuration de notre projet.Si on clique sur « ok » le fichier « hibernate. url .

Pour créer les fichiers de mapping et les classes entités on clique sur : « new »  « other » « hibernate » « hibernate Mapping File and pojo from database» 22 Dghaies jihed – Tutoriel développement des applications web J2EE .

23 Dghaies jihed – Tutoriel développement des applications web J2EE .

Si vous cliquez sur « finish » les fichiers de mapping et les classes représentant les tables de la base seront crées automatiquement dans le package mapping qu’on spécifié à l’étape précédente.xml » 24 Dghaies jihed – Tutoriel développement des applications web J2EE . La validation de cette étape génère un fichier « hibernate.reveng.xml » La liste des fichiers de mapping crées seront ajoutés dans le fichier « hibernate.cfg.

25 Dghaies jihed – Tutoriel développement des applications web J2EE . Arborescence des classes du projet. On valide le déplacement des fichiers en cliquant sur « Refactor ».java » générés dans ce package. On sélectionne les fichiers à déplacer et on fait drag and drop dans le package Entity.On va créer un autre package qu’on l’appellera « Entity » et on va déplacer les fichiers « .

5 »puis on clique sur « import Library » 26 Dghaies jihed – Tutoriel développement des applications web J2EE . Intégration de Spring 1. Ajout de la librairie Spring La p emiére étape pour intégrer spring dans notre application web consiste à ajouter le librarairie de spring dans notre projet.VI. On clique sur « add library » On clique sur « Import » On choisit le « Spring Framework 2.

On valide par « add library » 2. 27 Dghaies jihed – Tutoriel développement des applications web J2EE . Création du fichier de configuration Maintenant on passe à la création de fichier de configuration de Spring « applicationContext » ce fichier contient tous les beans qui seront gérés par Spring.

Le fichier doit être crée dans le dossier « WEB-INF » 28 Dghaies jihed – Tutoriel développement des applications web J2EE .

29 Dghaies jihed – Tutoriel développement des applications web J2EE .On va commencer par définir les paramètres de connexion à notre base de données.cfg. En effet le fichier de configuration de Spring contient les mêmes informations qui se trouvent dans le fichier « hibernate. Ensuite on spécifie les paramètres de générateur de session « session factory ». les fichiers de mapping utilisées et la classe responsable de la gestion de la session. On va déclarer aussi le Bean de gestion des erreurs liées aux exceptions SQL. Cette configuration consiste à spécifier les paramètres d’Hibernate.xml » ce qui rend ce fichier inutile et on pourra ainsi le supprimer.

30 Dghaies jihed – Tutoriel développement des applications web J2EE . Modify : pour modifier un enregistrement existant. Findall : pour récupérer la liste des enregistrements dans la base. La classe HibernateTemplate fournit des méthodes pour assurer la persistance des objets dans la base de données en utilisant Hibernate. On ajoute aussi dans le fichier « faces-config. Cette déclaration permet à JSF de voir les beans déclarés dans le fichier de configuration de Spring. 3.xml » les configurations liées à l’utilisation de Spring. Création de la couche Service et la couche DAO On passe maintenant à la création de la couche Service et la couche DAO. Après avoir effectué les configurations de base dans le fichier « applicationContext » on déclare dans le descripteur de déploiement « web. On crée un nouveau package qu’on l’appellera « Interfaces » et on crée dedans deux interfaces « interfaceDAO » et « interfaceService ». On déclare le gestionnaire de transaction pour hibernate. Dans notre exemple on va utiliser seulement 4 méthodes : Save : pour enregistrer les objets dans la base.xml » la déclaration de l’utilisation de Spring. Delete : pour supprimer un enregistrement. Les interfaces DAO et Service contiennet la définition des méthodes qu’on va utiliser.On déclare le Bean HibernateTemplate.

import org.hibernate3. this. public class ServiceDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Service serv = (Service) inst. } 31 Dghaies jihed – Tutoriel développement des applications web J2EE . import Interfaces.util. import java.dao » on va implémenter l’interface DAO pour chaque classe de notre application.getHibernateTemplate().InterfaceDAO.support. import java.Service. import Interfaces.List. } public List findAll() { return (List) this. public void modify(Object inst).Personnel.dao » Dans le package « implementation.util.InterfaceDAO. } InterfaceService package Interfaces.List.util.orm. public class PersonnelDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Personnel pers = (Personnel) inst.support.dao. /** * @author Jihed */ public interface InterfaceDAO { public void save(Object inst).orm.util. public void delete(Object inst). } } PersonnelDaoImpl package Implementation.List.save(serv). public List findAll().delete(serv). public void delete(Object inst).dao. } @Override public void modify(Object inst) { Service serv = (Service) inst.HibernateDaoSupport.springframework. this. import Entity. public List findAll().update(serv). import Entity.save(pers).getHibernateTemplate(). this.getHibernateTemplate().class).hibernate3. import org. } @Override public void delete(Object inst) { Service serv = (Service) inst.service » et « implementation.loadAll(Service. ServiceDaoImpl package Implementation. import java.HibernateDaoSupport.getHibernateTemplate().InterfaceDAO package Interfaces.getHibernateTemplate().List.springframework. } On crée deux autres package « Implementation. this. public void modify(Object inst). import java. /** * @author Jihed */ public interface InterfaceService { public void save(Object inst).

class). } } InterventionsDaoImpl package Implementation.InterfaceDAO.getHibernateTemplate(). import Interfaces. } public List findAll() { return (List) this. import org.save(interv). import Entity. Celle-ci fait appel à la couche DAO.getHibernateTemplate(). this.List.orm.delete(interv).dao. import java.util. } @Override public void delete(Object inst) { Interventions interv = (Interventions) inst.loadAll(Personnel.loadAll(Equipement. import Interfaces.getHibernateTemplate(). public class EquipementDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Equipement equip = (Equipement) inst. } @Override public void modify(Object inst) { Equipement equip = (Equipement) inst. this. this. } public List findAll() { return (List) this. } } EquipementDaoImpl package Implementation.update(equip).HibernateDaoSupport.save(equip). } @Override public void modify(Object inst) { Interventions interv = (Interventions) inst. } } Après avoir créé la couche DAO on va passer à la création de la couche service. } @Override public void delete(Object inst) { Equipement equip = (Equipement) inst.getHibernateTemplate().getHibernateTemplate().class).getHibernateTemplate().support.dao. import Entity.orm. ServiceServiceImpl 32 Dghaies jihed – Tutoriel développement des applications web J2EE .loadAll(Interventions. import org.HibernateDaoSupport.update(pers). } public List findAll() { return (List) this.InterfaceDAO. import java.Equipement. public class InterventionsDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Interventions interv = (Interventions) inst. } @Override public void delete(Object inst) { Personnel pers = (Personnel) inst.getHibernateTemplate().getHibernateTemplate().util. this.delete(equip).List.getHibernateTemplate().class).hibernate3. this.@Override public void modify(Object inst) { Personnel pers = (Personnel) inst.support. this.getHibernateTemplate().springframework. this.springframework.hibernate3.update(interv). this.getHibernateTemplate().delete(pers).Interventions.

serviceDao.package Implementation. import java.util.List.InterfaceDAO. import Entity. import Interfaces. serviceDao.List. personnelDao. public void save(Object instance) { Service serv = (Service) instance. import java. public void save(Object instance) { Personnel pers = (Personnel) instance.InterfaceService. } public void delete(Object instance) { Equipement equip = (Equipement) instance.util. import Interfaces. personnelDao. import Interfaces.InterfaceService.delete(equip). public class ServiceServiceImpl implements InterfaceService { private InterfaceDAO serviceDao. import Interfaces. } } PersonenlServiceImpl package Implementation. import Entity. import Interfaces. } public List findAll() { return serviceDao. } public void modify(Object instance) { Service serv = (Service) instance. } public void modify(Object instance) { Equipement equip = (Equipement) instance.findAll().personnelDao = personnelDao. } } EquipementlServiceImpl package Implementation.InterfaceService. } public List findAll() { return equipDao. } 33 Dghaies jihed – Tutoriel développement des applications web J2EE .service.util.InterfaceDAO. } public void setPersonnelDao(InterfaceDAO personnelDao) { this.save(equip). } public void delete(Object instance) { Personnel pers = (Personnel) instance.modify(equip). import Interfaces.Personnel. } public InterfaceDAO getPersonnelDao() { return personnelDao.delete(serv). serviceDao.Equipement. public class EquipementServiceImpl implements InterfaceService { private InterfaceDAO equipDao.findAll().Service. import java.findAll(). } public void setServiceDao(InterfaceDAO serviceDao) { this. import Entity.InterfaceDAO.modify(serv). equipDao. } public List findAll() { return personnelDao. personnelDao.serviceDao = serviceDao.service. public class PersonnelServiceImpl implements InterfaceService { private InterfaceDAO personnelDao.delete(pers). } public void modify(Object instance) { Personnel pers = (Personnel) instance. } public void delete(Object instance) { Service serv = (Service) instance.save(pers). equipDao. equipDao. public void save(Object instance) { Equipement equip = (Equipement) instance. } public InterfaceDAO getServiceDao() { return serviceDao.service.save(serv).modify(pers).List.

} public void delete(Object instance) { Interventions interv = (Interventions) instance.findAll(). intervDao.modify(interv). import java. } public void modify(Object instance) { Interventions interv = (Interventions) instance.public InterfaceDAO getEquipDao() { return equipDao. intervDao. } public List findAll() { return intervDao. import Entity. } public InterfaceDAO getIntervDao() { return intervDao. public void save(Object instance) { Interventions interv = (Interventions) instance. } public void setIntervDao(InterfaceDAO intervDao) { this.intervDao = intervDao.InterfaceService.save(interv). import Interfaces. 34 Dghaies jihed – Tutoriel développement des applications web J2EE .delete(interv).Interventions.service. } } Après avoir crée ces classes on va les déclarer dans le fichier de configuration de Spring.InterfaceDAO. public class InterventionsServiceImpl implements InterfaceService { private InterfaceDAO intervDao.util.equipDao = equipDao. import Interfaces. } } InterventionsServiceImpl package Implementation. } public void setEquipDao(InterfaceDAO equipDao) { this. intervDao.List.

org/schema/beans" xmlns:xsi="http://www.org/schema/aop http://www.springframework.5.cache.springframework.org/schema/aop" xmlns:tx="http://www.hbm.MySQLDialect</prop> <prop key="hibernate.dialect.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> <property name="jdbcExceptionTranslator"> <ref bean="jdbcExceptionTranslator"/> </property> </bean> 35 Dghaies jihed – Tutoriel développement des applications web J2EE .Les beans DAO font référence au Bean hibernatetemplate tant disque les Beans services font références aux beans DAO associés.hibernate3.xsd"> <!--Data Source Definition--> <bean id="dataSource" class="org.hibernate3.org/schema/aop/spring-aop-2.org/schema/tx http://www.hibernate.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>Mapping/Equipement.jdbc.springframework.springframework.springframework.cglib.springframework.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.jdbc.org/schema/tx" xmlns:p="http://www.dialect">org.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.provider_class">org.org/schema/beans/spring-beans2.springframework.hbm.org/schema/p" xsi:schemaLocation="http://www.springframework.orm.w3.datasource.xml</value> <value>Mapping/Personnel.jdbc.org/schema/tx/spring-tx-2.cache.orm.springframework.use_reflection_optimizer">true</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.springframework.springframework.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/gestion_parc</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>diag2000</value> </property> </bean> <!--Hibernate Session Factory Definition--> <bean id="sessionFactory" class="org.5.xsd http://www.5.springframework.org/schema/beans http://www.xml</value> <value>Mapping/Service.mysql.support.SQLErrorCodeSQLExceptionTranslator"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!--Hibernate Template Defintion--> <bean id="hibernateTemplate" class="org.springframework.hbm. applicationContext <?xml version="1.HashtableCacheProvider</prop> </props> </property> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!--Spring Data Access Exception Translator Defintion--> <bean id="jdbcExceptionTranslator" class="org.hibernate.xsd http://www.xml</value> <value>Mapping/Interventions.DriverManagerDataSource"> <property name="driverClassName"> <value>com.La déclaration des beans au niveau du fichier de configuration de Spring est terminé.org/2001/XMLSchema-instance" xmlns:aop="http://www.hbm.

PersonnelDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="equipDao" class="Implementation.dao.orm.ServiceDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="persDao" class="Implementation.hibernate3.PersonnelServiceImpl"> <property name="personnelDao" ref="persDao"/> </bean> <bean id="equipService" class="Implementation.service.dao.InterventionsDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <!--========================= Start of SERVICE BEANS DEFINITIONS =========================--> <bean id="servService" class="Implementation.<!--Hibernate Transaction Manager Definition--> <bean id="transactionManager" class="org.ServiceServiceImpl"> <property name="serviceDao" ref="serviceDao"/> </bean> <bean id="persService" class="Implementation.service.EquipementServiceImpl"> <property name="equipDao" ref="equipDao"/> </bean> <bean id="intervService" class="Implementation.dao.service.springframework.dao.EquipementDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="intervDao" class="Implementation.service. 36 Dghaies jihed – Tutoriel développement des applications web J2EE .InterventionsServiceImpl"> <property name="intervDao" ref="intervDao"/> </bean> </beans> Voici un shéma qui explique la relation entre les différents beans déclarés dans le fichier « applicationContext ».HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <!--========================= Start of DAO BEANS DEFINITIONS =========================--> <bean id="serviceDao" class="Implementation.

io.VII. this.etat = !this. On crée un nouveau package qu’on l’appelle Beans. public void chageretat() { this. protected String style_message. protected static String mess_insert_true = "Ajout effectué avec succès". Création des « managed Beans » 1.invetat = this. import java. protected static String mess_op_false = "Opération échouée". MessageBean package Beans. protected static String mess_del_true = "Suppression effectuée avec succès".Serializable. protected boolean invetat = false. Les Managed Bean vont hériter d’une classe qu’on l’appellera mesageBean et qui contiendra les messages à afficher dans l’application. } //getters and setters } On passe maintenant à la création des managed Bean 37 Dghaies jihed – Tutoriel développement des applications web J2EE . /** * @author Jihed */ public class messageBean implements Serializable { protected boolean etat = true. Puis on crée un Managed Bean pour chaque Classe Entity. protected static String mess_modif_true = "Modification effectuée avec succès".etat. Managed Bean pour la Classe Service On va maintenant créer nos « managed Beans » ( Beans gérés par JSF).etat.

model. import org. private Integer index = 0. 38 Dghaies jihed – Tutoriel développement des applications web J2EE . public void viderchamps() { message = "". private String message. public class ServiceBean extends messageBean implements Serializable { private Service serv. this.serv = new Service(). nouveau = true.get(index).List. import java. ServiceBean package Beans. changeretat(). } public boolean isInit() { message = "".InterfaceService.ajax4jsf. /** * @author Jihed */ import Entity. import org. changeretat(). service_list = (List) getService_list(). private List service_list = new ArrayList().richfaces. private boolean init. import java.util.io. import java. private UIDataTable dataTable.Serializable. import Interfaces.util.KeepAlive. private boolean nouveau.UIDataTable. le Bean crée sera automatiquement déclaré dans le fichier « faces-config.Si on valide.xml ».ArrayList.component.Service. private InterfaceService servService. serv = (Service) service_list. } public void annuler() { message = "".

serv). if (!service_list.servService. changeretat().save(this. message = mess_op_false. style_message = "err_message".getService_list().nouveau = nouveau. } public void setMessage(String message) { this. message = mess_insert_true. nouveau = false. } public void setInit(boolean init) { this. } public ServiceBean() { serv = new Service().servService. nouveau = false. changeretat(). message = mess_op_false.get(index).printStackTrace().get(0). } public String getMessage() { return message. message = "". style_message = "valid_message". } } else { try { this. return init. message = mess_del_true. style_message = "err_message". if (!(service_list.getRowData(). } } public Integer getIndex() { return index.delete(serv). } } catch (Exception hx) { hx.printStackTrace(). } catch (Exception hx) { hx. style_message = "valid_message". } changeretat(). } catch (Exception hx) { hx.servService. } public void create() { if (nouveau) { try { this.isEmpty()) { serv = (Service) service_list. } public void modifierligne() { this. } public void modifier() { message = "".serv = (Service) dataTable. invetat = !etat. } public void supprimer() { try { this. } service_list = (List) getService_list(). style_message = "valid_message". } public void setIndex(Integer index) { this. serv = (Service) service_list. } public void setNouveau(boolean nouveau) { this.message = message. } else { viderchamps(). message = mess_modif_true. changeretat(). } } 39 Dghaies jihed – Tutoriel développement des applications web J2EE .index = index. if (index > 0) { index--. } public Service getServ() { return serv.isEmpty())) { service_list = (List) getService_list().printStackTrace(). message = mess_op_false. } public boolean isNouveau() { return nouveau.modify(serv). } etat = true.init = init.

On commence par la page service.findAll(). return service_list. Liaison avec la page Service Maintenant on va lier nos interfaces graphiques avec les Beans crées. } public void setDataTable(UIDataTable dataTable) { this. } public void setServService(InterfaceService servService) { this. Pour chaque inputText on ajoute l’attribut « disabled » cet attribut permet de définir l’état du champ de saisie (actif ou grisé). 2. } } Dans le Bean « ServiceBean » on a déclaré un attribut de type « InterfaceService » donc on doit préciser la classe qui va implémenter cette interface. Le nom de la propriété est le même nom que l’attribut de type « InterfaceService » déclaré Dans le Bean « ServiceBean » et sa valeur est l’id du bean déclaré dans le fichier de configuration de spring.public void setServ(Service serv) { this.servService.servService = servService. On lie chaque input texte avec l’attribut de l’objet correspondant. } public void setService_list(List service_list) { this.servService.service_list = service_list. 40 Dghaies jihed – Tutoriel développement des applications web J2EE .serv = serv. } public InterfaceService getServService() { return this. } public UIDataTable getDataTable() { return dataTable. Or dans le fichier de configuration de spring on a spécifié les classes implémentant l’interface « InterfaceService » donc on ajoute une propriété à la déclaration du « ServiceBean » dans le fichier de configuration « faces-config. } public List getService_list() { service_list = this. Pour les boutons on ajoute les méthodes qu’on va exécuter (attribut action) et les champs qu’on va actualiser après l’exécution de ces méthodes (attribut reRender qui reçoit les identifiants des composants à rafraichir comme paramètres).xml ».dataTable = dataTable.

tableBackgroundColor}'" onRowClick="this.supprimer}" ajaxSingle="true" reRender="infomsg.sun.sun.w3.tablepanel.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.panelinfo.Code de la page Service : <%-Document : Service Created on : 12 déc.service_list}" var="serv" > <rich:column width="80px"> <f:facet name="header"> <h:outputText value="Code" /> </f:facet> <h:outputText value="#{serv.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.richfaces.style.servLib}" /> </rich:column> <rich:column style="text-align:center" width="70px" > <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink action="#{ServiceBean.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.tablepanel.SKIN.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.jsp"/> <h:inputHidden value="#{ServiceBean.org/TR/html4/loose.backgroundColor='#B5CEFD'" onRowMouseOut="this.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.dataTable}" onRowMouseOver="this.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> 41 Dghaies jihed – Tutoriel développement des applications web J2EE .backgroundColor='#F1F1F1'" width="450px" rows="8" id="tbl" value="#{ServiceBean.message}" styleClass="valid_message" /> <h:panelGrid width="450px" columns="1"> <rich:panel id="tablepanel" header="Liste Services" > <rich:dataTable binding="#{ServiceBean. 23:46:35 Author : jihed --%> <%@taglib uri="http://richfaces.01 Transitional//EN" "http://www.servCode}" /> </rich:column> <rich:column width="230px" > <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="#{serv.css"/> <title>Service</title> </head> <body> <h:form id="formservice"> <a4j:include viewId="Entete.backgroundColor='#{org.style. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.panelinfo.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center" width="70px"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink action="#{ServiceBean.modifierligne}" reRender="infomsg."> <rich:tab label="Services"> <h:outputText id="infomsg" value="#{ServiceBean.style. 2009.jsp"/> <a4j:include viewId="menu.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.

invetat}" reRender="infomsg.servLib}" id="libserv" size="25" maxlength="30" /> <h:outputText value="Description : " /> <h:inputText disabled="#{ServiceBean.invetat}" reRender="infomsg.panelinfo.tablepanel.servCode}"size="25" maxlength="30"> </h:inputText> <h:outputText value="Libellé : " /> <h:inputText disabled="#{ServiceBean.invetat}" reRender="infomsg.etat}" reRender="infomsg. L’utilisation de deux interfaces se traduit dans le fichier « faces-config.serv.viderchamps}" style="width:85px"/> <a4j:commandButton id="modifserv" ajaxSingle="true" disabled="#{ServiceBean.etat}" id="descrserv" value="#{ServiceBean.tablepanel.xml » par la déclaration de deux propriétés.etat}" reRender="infomsg.crud_panel" value="Modifier" action="#{ServiceBean.modifier}"style="width:85px"/> <a4j:commandButton id="suppserv" ajaxSingle="true" disabled="#{ServiceBean.panelinfo.tablepanel.tablepanel.annuler}" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 3.etat}" value="#{ServiceBean. 42 Dghaies jihed – Tutoriel développement des applications web J2EE .serv.crud_panel" value="Supprimer" action="#{ServiceBean.serv.create}" style="width:85px"/> <a4j:commandButton id="annulserv" ajaxSingle="true" disabled="#{ServiceBean.crud_panel" value="Annuler" action="#{ServiceBean.crud_panel" value="Nouveau" action="#{ServiceBean.etat}" id="codserv" value="#{ServiceBean.panelinfo.supprimer}" style="width:85px"/> <a4j:commandButton id="validserv" disabled="#{ServiceBean.panelinfo.crud_panel" value="Valider" action="#{ServiceBean. Managed Bean pour la Classe Personnel Le Bean PersonnelBean a pratiquement la même structure que le bean ServiceBean mais on va utiliser deux interfaces (interface servService pour les actions liées aux objets de type Service et l’interface persService pour les actions liées aux objets de type Personnel).<rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Code Service : " /> <h:inputText disabled="#{ServiceBean.panelinfo. On a donc déclaré une interface servService pour pouvoir récupérer la liste des services afin de les afficher dans un combo dans l’interface graphique.tablepanel.servDescr}" size="25" maxlength="50" /> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvserv" ajaxSingle="true" disabled="#{ServiceBean.

util. import org. private InterfaceService servService.richfaces.InterfaceService. import java.Personnel.component.Serializable. Le code de bean Personne : package Beans.List.io.UIDataTable. import java. import Entity. Dans l’interface graphique le composant combo va recevoir comme valeur suggérés (suggestionValues) la liste des clés de la hashTable et à chaque fois qu’on selectionne une clé on peut pointer directement sur l’objet associé.Service.ArrayList. public class PersonnelBean extends messageBean implements Serializable { private Personnel pers. 43 Dghaies jihed – Tutoriel développement des applications web J2EE .util. private InterfaceService persService.D’autre part on va utiliser une hashTable (table indexé) qui contient le code service concaténé avec le lib Service comme clé pour identifier un objet de type service. import java.util. import java. /** * @author Jihed */ import Entity. import Interfaces. import java.util.Hashtable.Iterator.

private boolean nouveau.pers = (Personnel) dataTable.pers). } public boolean isInit() { message = "". this.setService((Service) servlist. changeretat().get(0). invetat = !etat.getRowData().pers.get(current_service)). } public void modifierligne() { this. chargercombo().save(this.pers. private Integer index = 0.printStackTrace(). } } else { try { this. style_message = "err_message". chargercombo().get(index). } catch (Exception hx) { hx.persService. getServlist().getServCode() + "-" + this.setService(new Service()). message = mess_insert_true. style_message = "valid_message". public void viderchamps() { message = "".isEmpty())) { person_list = (List) getPerson_list(). private List service_list = new ArrayList(). this.pers = new Personnel().pers = new Personnel(). message = mess_op_false. private boolean init.getServLib(). } } changeretat().modify(pers). } public PersonnelBean() { this. message = mess_modif_true. } etat = true. nouveau = true.private List person_list = new ArrayList(). private String current_service. pers = (Personnel) person_list. chargercombo(). } public void create() { if (nouveau) { try { this.persService. private Hashtable servlist = new Hashtable(). } public void annuler() { message = "".pers.get(current_service)). private String message. if (!(person_list. this. 44 Dghaies jihed – Tutoriel développement des applications web J2EE . style_message = "err_message". } public void chargercombo() { current_service = this.getService().printStackTrace(). } catch (Exception hx) { hx. changeretat().getService(). pers = (Personnel) person_list.pers. style_message = "valid_message". person_list = (List) getPerson_list(). this. chargercombo(). message = mess_op_false.pers. getPerson_list(). return init. private UIDataTable dataTable.setService((Service) servlist.

message = mess_del_true.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html. servlist.01 Transitional//EN" "http://www.get(l.servService.findAll().hasNext().} public void modifier() { message = "". service_list.getServCode() + "-" + srv.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces. } //geters and setters …….printStackTrace().) { Service srv = (Service) l. } } public List getPerson_list() { person_list = this.persService. } return servlist. 2010.put(srv.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.jsp"/> 45 Dghaies jihed – Tutoriel développement des applications web J2EE .clear(). } 4. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.jsp"/> <a4j:include viewId="menu.getServLib()).findAll().com/jsf/core"%> <%@taglib prefix="h" uri="http://java. } public Hashtable getServlist() { service_list. changeretat(). nouveau = false. List l = this.indexOf(it.get(index).clear(). changeretat(). nouveau = false.next())).com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. servlist.message = "".add(srv. for (Iterator it = l. style_message = "valid_message".org/TR/html4/loose. srv)..persService.css"/> <title>Personnel</title> </head> <body> <h:form id="formpersonnel"> <a4j:include viewId="Entete. changeretat(). } } catch (Exception hx) { hx.isEmpty()) { pers = (Personnel) person_list. message = mess_op_false. chargercombo(). } public void supprimer() { try { this.sun.delete(pers).iterator(). return person_list.getServLib().sun. } person_list = (List) getPerson_list().getServCode() + "-" + srv. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces. Liaison avec la page Personnel Code de la page Peronnel <%-Document : Personnel Created on : 25 janv. if (!person_list.w3. it. if (index > 0) { index--. } else { viderchamps().

backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{PersonnelBean.tablepanel.etat}" size="25" maxlength="50" /> 46 Dghaies jihed – Tutoriel développement des applications web J2EE .persPrenom}" disabled="#{PersonnelBean.dataTable}" onRowMouseOut="this.persDroit}" /> </rich:column> <rich:column style="text-align:center" width="70px" > <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink action="#{PersonnelBean.panelinfo.persNom}"disabled="#{PersonnelBean.etat}" id="prepers" size="25" maxlength="30" /> <h:outputText value="Login : " /> <h:inputText id="logpers" value="#{PersonnelBean.style.supprimer}" ajaxSingle="true" reRender="infomsg.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Nom : " /> <h:inputText id="nompers" value="#{PersonnelBean.backgroundColor='#{org.SKIN.style.persPrenom}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Login" /> </f:facet> <h:outputText value="#{pers.panelinfo.etat}" size="25" maxlength="30"> </h:inputText> <h:outputText value="Prénom : " /> <h:inputText value="#{PersonnelBean.person_list}" var="pers"> <rich:column> <f:facet name="header"> <h:outputText value="Nom" /> </f:facet> <h:outputText value="#{pers.persLogin}"disabled="#{PersonnelBean."> <rich:tab label="Personnel"> <h:outputText id="infomsg" value="#{PersonnelBean.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.message}" styleClass="valid_message"/> <h:panelGrid width="450px" columns="1"> <rich:panel id="tablepanel" header="Liste Personnel" > <rich:dataTable onRowMouseOver="this.<h:inputHidden value="#{PersonnelBean.pers.persNom}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Prénom" /> </f:facet> <h:outputText value="#{pers.richfaces.tableBackgroundColor}'" onRowClick="this.modifierligne}" reRender="infomsg.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center" width="70px"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink action="#{PersonnelBean.pers.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.backgroundColor='#B5CEFD'" binding="#{PersonnelBean.tablepanel.style.pers.persLogin}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Droit" /> </f:facet> <h:outputText value="#{pers.

private boolean nouveau. 47 Dghaies jihed – Tutoriel développement des applications web J2EE . private List equip_list = new ArrayList().component.etat}"action="#{PersonnelBean.Serializable.invetat}" action="#{PersonnelBean.<h:outputText value="Password : " /> <h:inputSecret id="pwdpers" value="#{PersonnelBean. private InterfaceService servService.etat}"> <f:selectItem itemLabel="Utilisateur" itemValue="user" /> <f:selectItem itemLabel="Administrateur" itemValue="admin" /> </h:selectOneRadio> <h:outputText value="Service : " /> <rich:comboBox disabled="#{PersonnelBean. import Entity.tablepanel.tablepanel. private InterfaceService equipService.ArrayList. import java.util. private Integer index = 0.crud_panel"/> <a4j:commandButton id="annulpers" value="Annuler" style="width:85px" ajaxSingle="true" disabled="#{PersonnelBean.modifier}" reRender="infomsg.InterfaceService.tablepanel.create}"reRender="infomsg.UIDataTable.annuler}" reRender="infomsg.etat}" id="servpers" suggestionValues="#{PersonnelBean. private boolean init. private String message.etat}" action="#{PersonnelBean.util.panelinfo.persPassword}" disabled="#{PersonnelBean.panelinfo.Iterator.richfaces.crud_panel"/> <a4j:commandButton id="validpers" value="Valider" style="width:85px" disabled="#{PersonnelBean.util. import java.sipprimer}"reRender="infomsg.etat}" size="25" maxlength="50" /> <h:outputText value="Droit : " /> <h:selectOneRadio id="drpers" value="#{PersonnelBean.pers.Hashtable.Service.panelinfo. private Hashtable servlist = new Hashtable().service_list}" defaultLabel="Entrez une valeur" value="#{PersonnelBean.current_service}" > </rich:comboBox> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton action="#{PersonnelBean.invetat}"reRender="infomsg.pers.util.tablepanel.persDroit}" disabled="#{PersonnelBean. Managed Bean pour la Classe Equipement Code du bean equipement package Beans. import java.io. public class EquipementBean extends messageBean implements Serializable { private Equipement equip. private String current_service.crud_panel"/> <a4j:commandButton id="modifpers" value="Modifier" style="width:85px" ajaxSingle="true" disabled="#{PersonnelBean. /** * @author Jihed */ import Entity.List. import java.viderchamps}" id="nouvpers" value="Nouveau" ajaxSingle="true" style="width:85px" disabled="#{PersonnelBean.panelinfo.invetat}" action="#{PersonnelBean. import org. import Interfaces. import java.Equipement.tablepanel. private List service_list = new ArrayList().crud_panel"/> <a4j:commandButton id="supppers" value="Supprimer" style="width:85px" ajaxSingle="true" disabled="#{PersonnelBean.crud_panel"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 5.panelinfo.

changeretat().setService(new Service()). } etat = true. chargercombo(). equip_list = (List) getEquip_list().equip. message = mess_op_false. public void viderchamps() { message = "". invetat = !etat. } catch (Exception hx) { hx. } public void annuler() { message = "". message = mess_op_false. this. equip = (Equipement) equip_list. this.private UIDataTable dataTable. this.equip = (Equipement) dataTable. } } else { try { this. this.equipService. chargercombo(). changeretat().get(current_service)).printStackTrace().equip = new Equipement().save(this.equip = new Equipement(). return init. } public EquipementBean() { this. style_message = "valid_message".getRowData().get(index).getServLib().setService((Service) servlist. style_message = "err_message". } } changeretat(). } 48 Dghaies jihed – Tutoriel développement des applications web J2EE . } catch (Exception hx) { hx. } public void setInit(boolean init) { this.equip. equip = (Equipement) equip_list.equip). style_message = "err_message". chargercombo(). if (!(equip_list.setService((Service) servlist.modify(equip). } public void create() { if (nouveau) { try { this. message = mess_modif_true. getServlist(). changeretat(). message = mess_insert_true. nouveau = true.init = init.equipService.getService().isEmpty())) { equip_list = (List) getEquip_list().get(0).getServCode() + "-" + this.getService(). message = "".equip. nouveau = false.printStackTrace(). chargercombo(). } public void modifierligne() { this. } public boolean isInit() { message = "".equip.equip.get(current_service)). } public void chargercombo() { current_service = this. style_message = "valid_message". getEquip_list().

) { 49 Dghaies jihed – Tutoriel développement des applications web J2EE .servService.delete(equip).index = index. } public void setIndex(Integer index) { this.iterator(). } public List getEquip_list() { equip_list = this. } } catch (Exception hx) { hx. } public void setService_list(List service_list) { this. List l = this.service_list = service_list. message = mess_del_true.dataTable = dataTable.findAll(). } public String getMessage() { return message.public void modifier() { message = "".equipService. return equip_list. } public void setServService(InterfaceService servService) { this. } public InterfaceService getServService() { return servService. } public void setNouveau(boolean nouveau) { this. } public void setMessage(String message) { this. style_message = "valid_message". changeretat().message = message.findAll(). } } public Integer getIndex() { return index. if (index > 0) { index--. } public UIDataTable getDataTable() { return dataTable.get(index). servlist.equipService.nouveau = nouveau.clear(). } public void setDataTable(UIDataTable dataTable) { this. } public List getService_list() { return service_list. chargercombo(). for (Iterator it = l. nouveau = false. } else { viderchamps().clear().servService = servService. } public boolean isNouveau() { return nouveau. } public void supprimer() { try { this. } equip_list = (List) getEquip_list().isEmpty()) { equip = (Equipement) equip_list. changeretat(). it.printStackTrace().hasNext(). } public Hashtable getServlist() { service_list. if (!equip_list. message = mess_op_false.

} public Equipement getEquip() { return equip.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.css"/> <title>Equipement</title> </head> <body> 50 Dghaies jihed – Tutoriel développement des applications web J2EE . } public String getCurrent_service() { return current_service.put(srv. } public void setEquipService(InterfaceService equipService) { this.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.sun.getServLib()). srv). } public void setServlist(Hashtable servlist) { this. 2010. service_list.indexOf(it. } public void setEquip(Equipement equip) { this. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces. } public InterfaceService getEquipService() { return equipService.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.getServLib().Service srv = (Service) l.getServCode() + "-" + srv.equip = equip.org/TR/html4/loose. } public void setCurrent_service(String current_service) { this. Liaison avec la page Equipement Code de la page equipement <%-Document : Equipement Created on : 25 janv.sun.current_service = current_service.w3.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.01 Transitional//EN" "http://www.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.getServCode() + "-" + srv.add(srv. servlist.get(l. } } 6.servlist = servlist.next())).equipService = equipService. } return servlist. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.

panelinfo.servLib}" /> </rich:column> <rich:column style="text-align:center" width="70px" > <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink action="#{EquipementBean.etat}" size="25" maxlength="30"> </h:inputText> <h:outputText value="Description : " /> <h:inputTextarea value="#{EquipementBean.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{EquipementBean.style_message}"/> <rich:panel header="Liste Equipement" id="tablepanel"> <rich:dataTable onRowMouseOver="this.eqLib}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Etat" /> </f:facet> <h:outputText value="#{equip.eqLib}" disabled="#{EquipementBean.tablepanel.supprimer}" ajaxSingle="true" reRender="infomsg.eqEtat}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Service" /> </f:facet> <h:outputText value="#{equip.jsp"/> <a4j:include viewId="menu.panelinfo.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.etat}" 51 Dghaies jihed – Tutoriel développement des applications web J2EE .crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.equip.modifierligne}" reRender="infomsg.SKIN."> <rich:tab label="Equipement"> <h:panelGrid width="450px" columns="1"> <h:outputText id="infomsg" value="#{EquipementBean.equip.style.eqEtat}" > <f:selectItem itemLabel="Fonctionnel" itemValue="Fonctionnel" /> <f:selectItem itemLabel="En Panne" itemValue="En Panne" /> </h:selectOneRadio> <h:outputText value="Service : " /> <rich:comboBox id="servequip" defaultLabel="Entrez une valeur" disabled="#{EquipementBean.message}" styleClass="#{EquipementBean.style.tablepanel.equip.<h:form id="formequipement"> <a4j:include viewId="Entete.eqDescr}" disabled="#{EquipementBean.etat}" value="#{EquipementBean.richfaces.dataTable}" onRowMouseOut="this.backgroundColor='#B5CEFD'" binding="#{EquipementBean.jsp"/> <h:inputHidden value="#{EquipementBean.tableBackgroundColor}'" onRowClick="this.equip_list}" var="equip"> <rich:column> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="#{equip.service.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center" width="70px"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink action="#{EquipementBean.etat}" id="descrequip" rows="3" /> <h:outputText value="Etat : " /> <h:selectOneRadio id="etatequip" disabled="#{EquipementBean.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.style.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Libellé : " /> <h:inputText id="libquip" value="#{EquipementBean.backgroundColor='#{org.

Iterator. import Entity. this. private UIDataTable dataTable. private List equip_list = new ArrayList().util.tablepanel.Hashtable. private Hashtable perslist = new Hashtable().crud_panel"/> <a4j:commandButton id="annulequip" value="Annuler" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean. private boolean init. nouveau = true. import Entity. private InterfaceService persService. private List interv_list = new ArrayList(). import java.panelinfo.Personnel.ArrayList.Serializable. public void viderchamps() { message = "".List. import java.UIDataTable. private String current_personnel.supprimer}" reRender="infomsg.interv = new Interventions(). private Integer index = 0. import org.invetat}"action="#{EquipementBean.panelinfo.etat}"action="#{EquipementBean.service_list}" required="true"> </rich:comboBox> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvequip" value="Nouveau" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean.crud_panel"/> <a4j:commandButton id="validequip" value="Valider" style="width:85px" disabled="#{EquipementBean. private Hashtable equiplist = new Hashtable(). Managed Bean pour la Classe Interventions Code du Bean Interventions package Beans.crud_panel"/> <a4j:commandButton id="modifequip" value="Modifier" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean.invetat}"action="#{EquipementBean.panelinfo.InterfaceService. changeretat(). private InterfaceService equipService. private InterfaceService intervService.etat}"action="#{EquipementBean. private boolean nouveau.component.Interventions.Equipement.util. private List person_list = new ArrayList(). import java.current_service}" suggestionValues="#{EquipementBean.crud_panel"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 7.richfaces.crud_panel"/> <a4j:commandButton id="suppequip" value="Supprimer" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean. import java.tablepanel.tablepanel.util. private String message. private String current_equipement.modifier}" reRender="infomsg.panelinfo. import Entity.annuler}" reRender="infomsg.value="#{EquipementBean.etat}"action="#{EquipementBean. import java. /** * * @author jihed */ public class InterventionsBean extends messageBean implements Serializable { private Interventions interv. import Interfaces.panelinfo.viderchamps}" reRender="infomsg.tablepanel.create}" reRender="infomsg.tablepanel.util. 52 Dghaies jihed – Tutoriel développement des applications web J2EE .io.

printStackTrace().save(this. current_equipement = this.interv.interv.modify(interv). } public InterventionsBean() { this. } } changeretat(). changeretat(). chargercombo().interv = new Interventions(). message = mess_op_false. } public void chargercombo() { current_personnel = this.interv. } } else { try { this. } public void modifierligne() { this.interv). getPerslist(). chargercombo().interv. invetat = !etat.interv.get(current_personnel)).interv = (Interventions) dataTable. this. style_message = "valid_message".setEquipement(new Equipement()). interv = (Interventions) interv_list. } catch (Exception hx) { hx.interv. this. getInterv_list(). interv = (Interventions) interv_list. if (!(interv_list. style_message = "err_message". chargercombo(). chargercombo(). this. this.intervService. return init.interv. } public void create() { if (nouveau) { try { this.setEquipement((Equipement) equiplist.setPersonnel((Personnel) perslist. this. this.init = init. } etat = true. message = mess_op_false. changeretat(). message = "".intervService.interv.setPersonnel(new Personnel()).getEquipement(). } catch (Exception hx) { hx. } public boolean isInit() { message = "".get(current_equipement)). } public void setInit(boolean init) { this. message = mess_insert_true.get(current_personnel)).setEquipement((Equipement) equiplist. message = mess_modif_true.get(current_equipement)).getPersPrenom().getRowData(). interv_list = (List) getEquip_list().get(index). style_message = "valid_message". getEquiplist().} public void annuler() { message = "".getPersonnel().setPersonnel((Personnel) perslist. nouveau = false.getEqLib().getPersonnel().interv.getPersNom() + "-" + this.isEmpty())) { interv_list = (List) getInterv_list(). } public void modifier() { 53 Dghaies jihed – Tutoriel développement des applications web J2EE .printStackTrace(). style_message = "err_message".get(0).

message = mess_op_false.current_equipement = current_equipement.get(index). } interv_list = (List) getEquip_list().dataTable = dataTable. if (!interv_list.) { Personnel pers = (Personnel) l. } public void setNouveau(boolean nouveau) { this. } } catch (Exception hx) { hx.index = index. } public String getCurrent_personnel() { 54 Dghaies jihed – Tutoriel développement des applications web J2EE .delete(interv). List l = this. } } public Integer getIndex() { return index. } public String getCurrent_equipement() { return current_equipement.clear().message = "". pers). if (index > 0) { index--. message = mess_del_true.get(l.nouveau = nouveau.findAll(). } public UIDataTable getDataTable() { return dataTable. for (Iterator it = l. } public void setMessage(String message) { this. } return perslist. it. nouveau = false.hasNext(). } public void setDataTable(UIDataTable dataTable) { this. return interv_list.put(pers.printStackTrace(). } else { viderchamps().getPersNom() + "-" + pers.iterator().next())). } public List getInterv_list() { interv_list = this. } public boolean isNouveau() { return nouveau.findAll().persService. person_list.isEmpty()) { interv = (Interventions) interv_list. style_message = "valid_message". } public void setIndex(Integer index) { this. chargercombo().clear().getPersPrenom()).message = message.indexOf(it. perslist. changeretat(). } public void supprimer() { try { this.intervService. } public Hashtable getPerslist() { person_list. } public String getMessage() { return message.intervService.add(pers.getPersNom() + "-" + pers.getPersPrenom(). } public void setCurrent_equipement(String current_equipement) { this. perslist. changeretat().

equiplist.persService = persService. } } 55 Dghaies jihed – Tutoriel développement des applications web J2EE . it.clear().current_personnel = current_personnel. } public Hashtable getEquiplist() { equip_list. } public void setEquip_list(List equip_list) { this.person_list = person_list. } public InterfaceService getEquipService() { return equipService.hasNext(). } public List getEquip_list() { return equip_list. } public void setPerslist(Hashtable perslist) { this. } public void setEquiplist(Hashtable equiplist) { this.clear(). } public void setCurrent_personnel(String current_personnel) { this.equiplist = equiplist. } public InterfaceService getPersService() { return persService.getEqLib().perslist = perslist. } public void setIntervService(InterfaceService intervService) { this.iterator().interv = interv.findAll(). for (Iterator it = l.interv_list = interv_list. } public Interventions getInterv() { return interv.return current_personnel.next())).intervService = intervService. List l = this. } public void setEquipService(InterfaceService equipService) { this. } return equiplist. } public void setPersService(InterfaceService persService) { this. } public InterfaceService getIntervService() { return intervService. } public void setPerson_list(List person_list) { this. } public List getPerson_list() { return person_list. equip_list.get(l.getEqLib()).) { Equipement equip = (Equipement) l. equip).equipService.put(equip. equiplist.indexOf(it.equip_list = equip_list.equipService = equipService.add(equip. } public void setInterv_list(List interv_list) { this. } public void setInterv(Interventions interv) { this.

01 Transitional//EN" "http://www. 2010.w3.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.style.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.richfaces."> <rich:tab label="Intervention"> <h:panelGrid width="450px" columns="1"> <h:outputText id="infomsg" value="#{IntervBean.8.style.backgroundColor='#{org.equipement.jsp"/> <h:inputHidden value="#{IntervBean.eqLib}" /> </rich:column> 56 Dghaies jihed – Tutoriel développement des applications web J2EE .SKIN. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.css"/> <title>Intervention</title> </head> <body> <h:form id="formintervention"> <a4j:include viewId="Entete.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.message}" styleClass="#{IntervBean.style.dataTable}" onRowMouseOut="this.tableBackgroundColor}'" onRowClick="this. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.style_message}"/> <rich:panel id="tablepanel" header="Liste Interventions" > <rich:dataTable onRowMouseOver="this.org/TR/html4/loose.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{IntervBean.interv_list}" var="interv"> <rich:column> <f:facet name="header"> <h:outputText value="Equipement" /> </f:facet> <h:outputText value="#{interv.jsp"/> <a4j:include viewId="menu.sun.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px. Liaison avec la page Interventions Code de la page Interventions <%-Document : Intervention Created on : 25 janv.sun.backgroundColor='#B5CEFD'" binding="#{IntervBean.

tablepanel.tablepanel.persNom} #{interv.crud_panel"/> <a4j:commandButton id="suppinterv" value="Supprimer" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.tablepanel.crud_panel"/> <a4j:commandButton id="modifinterv" value="Modifier" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.annuler}" reRender="infomsg.crud_panel"/> <a4j:commandButton id="annulinterv" value="Annuler" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.crud_panel"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> 57 Dghaies jihed – Tutoriel développement des applications web J2EE .etat}" value="#{IntervBean.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Equipement : " /> <rich:comboBox id="eqpinterv" defaultLabel="Entrez une valeur" required="true" disabled="#{IntervBean.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center" width="70px"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink action="#{IntervBean.equip_list}" > </rich:comboBox> <h:outputText value="Intervenant : " /> <rich:comboBox id="persinterv" defaultLabel="Entrez une valeur" disabled="#{IntervBean.interv.etat}"action="#{IntervBean.invetat}"action="#{IntervBean.personnel.create}" reRender="infomsg.tablepanel.panelinfo.panelinfo.etat}"action="#{IntervBean.panelinfo.persPrenom}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Date" /> </f:facet> <h:outputText value="#{interv.panelinfo.tablepanel.etat}" value="#{IntervBean.viderchamps}" reRender="infomsg.supprimer}" ajaxSingle="true" reRender="infomsg.tablepanel.modifier}" reRender="infomsg.modifierligne}" reRender="infomsg.tablepanel.intervDate}" > <f:convertDateTime pattern="dd/MM/yyyy" /> </h:outputText> </rich:column> <rich:column style="text-align:center" width="70px" > <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink action="#{IntervBean.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.panelinfo.etat}"action="#{IntervBean.person_list}" required="true"> </rich:comboBox> <h:outputText value="Date intervention : " /> <rich:calendar id="foFiscal" value="#{IntervBean.personnel.current_personnel}" suggestionValues="#{IntervBean.crud_panel"/> <a4j:commandButton id="validinterv" value="Valider" style="width:85px" disabled="#{IntervBean.invetat}"action="#{IntervBean.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.intervDate}" popup="true" datePattern="dd/MM/yyyy" cellWidth="24px" cellHeight="22px" disabled="#{IntervBean.etat}"/> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvinterv" value="Nouveau" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.supprimer}" reRender="infomsg.<rich:column > <f:facet name="header"> <h:outputText value="Intervenant" /> </f:facet> <h:outputText value="#{interv.panelinfo.panelinfo.current_equipement}" suggestionValues="#{IntervBean.

</html> </f:view>

9. Fichier de confiuration « Faces-config » Fichier faces ocnfig
<?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== --> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application> <managed-bean> <managed-bean-name>ServiceBean</managed-bean-name> <managed-bean-class>Beans.ServiceBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>servService</property-name> <value>#{servService}</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>PersonnelBean</managed-bean-name> <managed-bean-class>Beans.PersonnelBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>servService</property-name> <value>#{servService}</value> </managed-property> <managed-property> <property-name>persService</property-name> <value>#{persService}</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>EquipementBean</managed-bean-name> <managed-bean-class>Beans.EquipementBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>servService</property-name> <value>#{servService}</value> </managed-property> <managed-property> <property-name>equipService</property-name> <value>#{equipService}</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>IntervBean</managed-bean-name> <managed-bean-class>Beans.InterventionsBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>equipService</property-name> <value>#{equipService}</value> </managed-property> <managed-property> <property-name>persService</property-name> <value>#{persService}</value> </managed-property> <managed-property> <property-name>intervService</property-name> <value>#{intervService}</value> </managed-property> </managed-bean> </faces-config>

58

Dghaies jihed – Tutoriel développement des applications web J2EE

10.

Diagramme de l’aplication

59

Dghaies jihed – Tutoriel développement des applications web J2EE

VIII.

Gestion de l’accés à l’aplication

1. Changement de la page d’aceuil On va changer la page d’acceuil et on mettra authentification.jsp comme page d’acceuil. On ouvre le fichier web.xml puis on clique qur l’onglet pages

On clique sur browse puis on choisit Authentification.jsp

60

Dghaies jihed – Tutoriel développement des applications web J2EE

hibernate3. public Personnel findByLoginAndPassword(String login.support. import Entity. String pass).springframework.persLogin ='" + login + "' and pers. public class AuthenticationServiceImpl implements AuthenticationService { private AuthenticationDAO loginDao. } Puis on passe à l’implémentation package Implementation. Création du bean «AuthenticationBean » La derniére étape de notre projet sera la création du bean pour l’authentification et de faire la redirection entre la page d’authentification et les autres pages.AuthenticationDAO.printStackTrace().2. } catch (Exception re) { re. String pass) { try { Personnel pers = (Personnel) getHibernateTemplate(). On commence par la création des deux interfaces DAO et Service pour ce bean. return pers.AuthenticationDAO. } package Interfaces. public interface AuthenticationService { public Personnel findByLoginAndPassword(String login. /** * @author Jihed */ import Entity. import Interfaces. String pass) { 61 Dghaies jihed – Tutoriel développement des applications web J2EE .find(" from Personnel pers where pers.orm. import Entity. package Interfaces. import org. import Interfaces. } } } ------------------------------------------------package Implementation.get(0). import Entity.service. return null.Personnel. String pass). /** * @author Jihed */ public class AuthenticationDaoImpl extends HibernateDaoSupport implements AuthenticationDAO { public Personnel findByLoginAndPassword(String login.Personnel.dao. /** * @author Jihed */ public interface AuthenticationDAO { public Personnel findByLoginAndPassword(String login.Personnel.HibernateDaoSupport.Personnel.persPassword ='" + pass + "'"). import Interfaces.AuthenticationService.

public AuthenticationBean() { } public String getLogin() { return login. private Personnel pers. private String password.context. import javax. } public void setLogin(String login) { this.faces.FacesContext. return today. } public String getToday() throws Exception { Date maDateAvecFormat = new Date().ExternalContext. private String login.findByLoginAndPassword(login. } else if (pers.util. } public void setLoginDao(AuthenticationDAO loginDao) { this.service.Personnel. import Interfaces.getPersDroit(). import Entity. } } Déclaration dans le fichier de configuration de Spring <bean id="loginDao" class="Implementation.today = td. /** * @author Hsan */ public class AuthenticationBean extends messageBean { private AuthenticationService loginService. today = "" + dateStandard. try { pers = loginService.findByLoginAndPassword(login.faces.getPersDroit(). SimpleDateFormat dateStandard = new SimpleDateFormat("EEEE dd MMMM yyyy").dao.equals("user")) { droit = "user".equals("admin")) { 62 Dghaies jihed – Tutoriel développement des applications web J2EE .password = password.AuthenticationDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="loginService" class="Implementation. private String today. } public AuthenticationDAO getLoginDao() { return loginDao.AuthenticationServiceImpl"> <property name="loginDao" ref="loginDao"/> </bean> Création d’un nouveau bean qu’on l’appelle « AuthenticationBean » package Beans. if (pers != null) { if (pers.text. password). } public String connecter() { String droit = null. import java.return loginDao.context.SimpleDateFormat. } public void setToday(String td) { this. pass).AuthenticationService. } public void setPassword(String password) { this. message = "".Date. import java. private String message. dateStandard = null. } public String getPassword() { return password.loginDao = loginDao. import javax.login = login.format(maDateAvecFormat).

login = "". } System. style_message = "err_message". } public AuthenticationService getLoginService() { return loginService. this.println("********DROIT*****" + droit).login = "". Liaison avec la page Authentification Code de la Page web <%-Document : Authentification Created on : 25 janv. 2010.droit = "admin". ExtContext. } public Personnel getPers() { return pers. } else { message = "Echec de connexion. } public void setLoginService(AuthenticationService loginService) { this. return droit.printStackTrace(). this.getCurrentInstance(). } return "ok".loginService = loginService. } } 3. return "invalide".out.password = "". } public void setPers(Personnel pers) { this. style_message = "err_message". 21:30:57 Author : jihed --%> 63 Dghaies jihed – Tutoriel développement des applications web J2EE . } public String getMessage() { return message. verifiez votre login et mot de passe !". this. this.password = "".getExternalContext(). return "invalide". } public void setMessage(String message) { this.printStackTrace(). } } catch (Exception fe) { fe.pers = pers. } catch (Exception ex) { ex. message = "Echec de connexion.getSessionMap().clear(). verifiez votre login et mot de passe !".message = message. } } public String deconnecter() { try { ExternalContext ExtContext = FacesContext.

width:400px.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.w3. dans notre exemple si le bean « authentification » va retourner la valeur « invalid » on va rester sur la même page « Authentification ».org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.requestContextPath}/images/ajax/userauth." header="Authentification" styleClass="panel_3"> <h:panelGrid columns="3"> <h:outputText value="Login:" /> <h:inputText id="log" value="#{LoginBean.background-position:-35px -15px.externalContext. charset=UTF-8"> <title>Authentification</title> </head> <body > <rich:spacer height="200px"></rich:spacer> <center > <rich:panel id="logpan" style="backgroundimage:url(#{facesContext.connecter}" reRender="logpan"/> </rich:panel> </center> </body> </html> </h:form> </f:view> 4.sun. Ajout des navigation rules 64 Dghaies jihed – Tutoriel développement des applications web J2EE .com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. background-repeat:no-repeat.png).dtd"> <f:view> <h:form> <html> <head> <meta http-equiv="Content-Type" content="text/html.password}" required="true" requiredMessage="champs obligatoire" /> <rich:message for="mdp" style="color: red"/> </h:panelGrid> <rich:spacer height="30px"></rich:spacer> <a4j:commandButton value ="Connexion" action="#{LoginBean. Si le Bean retourne la valeur « user » on va etre redirigée vers la page « Personnel » et si le bean retourne la valeur « admin » on va etre redirigée vers la page « Interventions ».org/TR/html4/loose.<%@taglib uri="http://richfaces.sun.login}" required="true" requiredMessage="champs obligatoire" /> <rich:message for="log" style="color: red"/> <h:outputText value="Mot de passe :" /> <h:inputSecret id="mdp" value="#{LoginBean. . Ajout des « navigation rules » Les « navigation rules » permettent de définir les redirections entre les pages web dans notre application .01 Transitional//EN" "http://www.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.

org/TR/html4/loose.requestContextPath}/faces/Authentification.pers.deconnecter}" id="dec_btn" image="/images/ajax/lock. 21:47:07 Author : jihed --%> <%@taglib uri="http://richfaces.externalContext.today}" styleClass="titre_gris"/> <rich:spacer width="225px"/> <h:outputText id="user" value="#{LoginBean.persNom} #{LoginBean.pers. <%-Document : Entete Created on : 25 janv.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.pers.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.href='#{facesContext.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.requestContextPath}/faces/Authentification.servLib}" styleClass="titre_bleu"/> <rich:spacer width="225px"/> <h:outputText value="Club CFEM 2010" styleClass="titre_gris"/> <rich:spacer width="50px"/> <h:form> <h:panelGrid columns="3"> <a4j:commandButton image="/images/ajax/home.service.sun. 2010.href='#{facesContext.gif" onclick="document.sun.gif" onclick="document.externalContext.persPrenom}" styleClass="titre_bleu"/> <rich:spacer width="6px"/> <h:outputText value=" | " styleClass="titre2"/> <rich:spacer width="6px"/> <h:outputText id="service" value="#{LoginBean.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.w3.jsp'" > <rich:toolTip showDelay="500"> Déconnexion </rich:toolTip> </a4j:commandButton> </h:panelGrid> </h:form> </h:panelGrid> 65 Dghaies jihed – Tutoriel développement des applications web J2EE .location.dtd"> <h:panelGrid columns="12" > <rich:spacer width="50px"/> <h:outputText id="dtjr" value="#{LoginBean.5.01 Transitional//EN" "http://www. Changement de la page entete On va changer un peu dans la structure de l’entete pour pouvoir afficher les details de la personne connectée.jsp'" > <rich:toolTip showDelay="500"> Acceuil </rich:toolTip> </a4j:commandButton> <rich:spacer width="2px"/> <a4j:commandButton action="#{LoginBean.location.

66 Dghaies jihed – Tutoriel développement des applications web J2EE . Déployer l'application Le déploiement d'une application web sur un serveur d'applications signifie en quelque sorte son installation. Le fichier WAR génére se trouve sous le répertoire dist du projet : 2. Création du fichier war Les WAR (Web Application Archive) sont en réalité des JAR mais avec une extension différente. En effet.IX. Dans l’onglet « services » de netbeans on trouve la liste des serveurs. Puis il suffit de faire un build pour l’application pour obtenir un fichier war. Ça permet de compresser toute l'application web et ses dépendences dans un seul fichier. pour créer un fichier war il faut spécifier dans le spropriétés du projet q’on va compresser l’application en tant que fichier WAR. on choisit le serveur tomcat puis on clique sur propriétes. On va commencer par voir les parametres de notre serveur tomcat. Deploiement de l’application 1.

67 Dghaies jihed – Tutoriel développement des applications web J2EE .On démarre le serveur tomcat On ouvre le navigateur web et on tape l’url de serveur.

L’url par défaut est « http://localhost:8080 » mais on peut changer le numéro de port . sur la page d'index de Tomcat.mais c'est strictement la même chose pour un serveur de production. Vous allez ensuite être invité à entrer un nom d'usager et mot de passe (le login et le mot de passe se trouvent dans les propriétés du serveur qu’ona déjà vu). Cliquez dessus. 68 Dghaies jihed – Tutoriel développement des applications web J2EE . Il devrait y avoir un lien à gauche Tomcat Manager.nous allons faire le deploiement sur le serveur tomcat qui est installé localement .

Donc dans notre exemple. L’application est maintenant déployée. Allez au bas de la page dans la section “WAR file to deploy”. l'application déployée sera accessible via l'url : http://localhost:8084/TP-JSF/. l'url de l'application sera le nom de l'archive (WAR) sans l'extension.La page « tomcat manager » contient la liste des applications présentes sur le serveur. 69 Dghaies jihed – Tutoriel développement des applications web J2EE . Sélectionnez votre WAR à l'aide du bouton browse et cliquez sur le bouton “Deploy”.

Sign up to vote on this title
UsefulNot useful