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

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

org/richfaces/download/stable.html.SR1) à partir de cette adresse : http://www.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 ».2. 5) Télécharger la dernière version stable de RichFaces (RichFaces 3.jboss. Créer un nouveau projet : Choisir java webweb application Donner un nom à votre projet. 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 Dghaies jihed – Tutoriel développement des applications web J2EE .

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 .

Pour le moment on va utiliser seulement les frameworks JSF/Richfaces pour concevoir les interfaces graphiques de notre application.Maintenant vous avez crée votre premier projet Web.richfaces » contenant un managed bean appelé « RichFacesBean». 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.xml et le fichier faces-config. Si vous ouvrez le fichier web.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.jsp » et un package « org. Dans les propriétés du projet (bouton droitpropriétés) on choisit « Libraries ». 7 Dghaies jihed – Tutoriel développement des applications web J2EE . Dans cet onglet on trouve les libraries utilisées dans notre projet on sélectionne la librairie RichFaces puis on clique sur « edit ».my.

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

org/TR/html4/loose. interventions.<%@taglib uri="http://richfaces.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.png).dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.w3.01 Transitional//EN" "http://www.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.requestContextPath}/images/ajax/userauth.sun.sun.gif"> <rich:toolTip showDelay="500"> Acceuil </rich:toolTip> </a4j:commandButton> 9 Dghaies jihed – Tutoriel développement des applications web J2EE .org/TR/html4/loose. .com/jsf/core"%> <%@taglib prefix="h" uri="http://java.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces. 2010.sun. background-repeat:no-repeat.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.width:400px. Page entête La page entête sera inclut dans les Pages : service.externalContext. charset=UTF-8"> <title>Authentification</title> </head> <body > <rich:spacer height="200px"></rich:spacer> <center > <rich:panel style="background-image:url(#{facesContext.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces. 21:47:07 Author : jihed --%> <%@taglib uri="http://richfaces.w3." 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.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. équipement et personnel Code de la page <%-Document : Entete Created on : 25 janv.01 Transitional//EN" "http://www.sun.background-position:-35px -15px.

href='/TP-JSF/faces/Personnel.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.<rich:spacer width="2px"/> <a4j:commandButton id="dec_btn" image="/images/ajax/lock.href='/TP-JSF/faces/Service.gif"> <rich:toolTip showDelay="500"> Déconnexion </rich:toolTip> </a4j:commandButton> </h:panelGrid> </h:form> </h:panelGrid> 3.location.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.location.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.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.jsp'"/> </rich:dropDownMenu> </rich:toolBar> 10 Dghaies jihed – Tutoriel développement des applications web J2EE . Page Menu La page entête sera inclut dans les Pages : service.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.location.href='/TP-JSF/faces/Equipement. équipement et personnel Code de la page <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://richfaces.href='/TP-JSF/faces/Interventions.sun.sun.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java. interventions.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.

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

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." > <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.

style.style. Page Personnel rich:comboBox h:selectOneRadio Code de la page <%-Document : Personnel Created on : 25 janv.tableBackgroundColor}'" onRowClick="this.backgroundColor='#{org.style.richfaces."> <rich:tab label="Personnel"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Personnel" > <rich:dataTable onRowMouseOver="this.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html. 2010.5.SKIN.sun.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.w3.css"/> <title>Personnel</title> </head> <body> <h:form id="formpersonnel"> <a4j:include viewId="Entete.org/TR/html4/loose.sun.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.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 .backgroundColor='#B5CEFD'" onRowMouseOut="this.jsp"/> <a4j:include viewId="menu.

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="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.

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

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

<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.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 .

xml » 19 Dghaies jihed – Tutoriel développement des applications web J2EE . 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. On commencera par la création de fichier de configuration d’Hibernate « hibernate.

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

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

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 .

cfg. La validation de cette étape génère un fichier « hibernate.reveng.xml » 24 Dghaies jihed – Tutoriel développement des applications web J2EE .xml » La liste des fichiers de mapping crées seront ajoutés dans le fichier « hibernate.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.

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. Arborescence des classes du projet. 25 Dghaies jihed – Tutoriel développement des applications web J2EE .On va créer un autre package qu’on l’appellera « Entity » et on va déplacer les fichiers « . On valide le déplacement des fichiers en cliquant sur « Refactor ».

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.5 »puis on clique sur « import Library » 26 Dghaies jihed – Tutoriel développement des applications web J2EE . On clique sur « add library » On clique sur « Import » On choisit le « Spring Framework 2.

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. 27 Dghaies jihed – Tutoriel développement des applications web J2EE .On valide par « add library » 2.

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

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

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

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

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

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

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

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 ».EquipementServiceImpl"> <property name="equipDao" ref="equipDao"/> </bean> <bean id="intervService" class="Implementation.InterventionsDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <!--========================= Start of SERVICE BEANS DEFINITIONS =========================--> <bean id="servService" class="Implementation. 36 Dghaies jihed – Tutoriel développement des applications web J2EE .springframework.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <!--========================= Start of DAO BEANS DEFINITIONS =========================--> <bean id="serviceDao" class="Implementation.dao.hibernate3.ServiceServiceImpl"> <property name="serviceDao" ref="serviceDao"/> </bean> <bean id="persService" class="Implementation.service.EquipementDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="intervDao" class="Implementation.service.dao.ServiceDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="persDao" class="Implementation.orm.service.dao.service.PersonnelServiceImpl"> <property name="personnelDao" ref="persDao"/> </bean> <bean id="equipService" class="Implementation.dao.PersonnelDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="equipDao" class="Implementation.<!--Hibernate Transaction Manager Definition--> <bean id="transactionManager" class="org.

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

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

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

return service_list. 40 Dghaies jihed – Tutoriel développement des applications web J2EE .dataTable = dataTable.public void setServ(Service serv) { this. Liaison avec la page Service Maintenant on va lier nos interfaces graphiques avec les Beans crées.service_list = service_list.serv = serv.servService. 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. Pour chaque inputText on ajoute l’attribut « disabled » cet attribut permet de définir l’état du champ de saisie (actif ou grisé).servService. } public UIDataTable getDataTable() { return dataTable.servService = servService. 2. } public void setDataTable(UIDataTable dataTable) { 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). 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. } } 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. } public void setService_list(List service_list) { this. } public void setServService(InterfaceService servService) { this. On lie chaque input texte avec l’attribut de l’objet correspondant.findAll(). } public InterfaceService getServService() { return this. } public List getService_list() { service_list = this.xml ». On commence par la page service.

style.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.org/TR/html4/loose.dataTable}" onRowMouseOver="this.01 Transitional//EN" "http://www.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.style.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="#{ServiceBean.SKIN.Code de la page Service : <%-Document : Service Created on : 12 déc.tablepanel. 2009.jsp"/> <a4j:include viewId="menu.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.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.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.service_list}" var="serv" > <rich:column width="80px"> <f:facet name="header"> <h:outputText value="Code" /> </f:facet> <h:outputText value="#{serv.sun.richfaces.css"/> <title>Service</title> </head> <body> <h:form id="formservice"> <a4j:include viewId="Entete.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.w3.modifierligne}" reRender="infomsg.panelinfo.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 .jsp"/> <h:inputHidden value="#{ServiceBean."> <rich:tab label="Services"> <h:outputText id="infomsg" value="#{ServiceBean.servCode}" /> </rich:column> <rich:column width="230px" > <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="#{serv.backgroundColor='#B5CEFD'" onRowMouseOut="this.tableBackgroundColor}'" onRowClick="this.backgroundColor='#{org.tablepanel.sun.style.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.supprimer}" ajaxSingle="true" reRender="infomsg.backgroundColor='#F1F1F1'" width="450px" rows="8" id="tbl" value="#{ServiceBean.

crud_panel" value="Valider" action="#{ServiceBean.serv.<rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Code Service : " /> <h:inputText disabled="#{ServiceBean.crud_panel" value="Supprimer" action="#{ServiceBean.tablepanel.crud_panel" value="Modifier" action="#{ServiceBean.tablepanel.panelinfo.etat}" value="#{ServiceBean.etat}" reRender="infomsg.annuler}" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 3.etat}" id="codserv" value="#{ServiceBean.invetat}" reRender="infomsg.serv.supprimer}" style="width:85px"/> <a4j:commandButton id="validserv" disabled="#{ServiceBean.tablepanel. L’utilisation de deux interfaces se traduit dans le fichier « faces-config.invetat}" reRender="infomsg.servLib}" id="libserv" size="25" maxlength="30" /> <h:outputText value="Description : " /> <h:inputText disabled="#{ServiceBean.tablepanel.panelinfo.tablepanel.viderchamps}" style="width:85px"/> <a4j:commandButton id="modifserv" ajaxSingle="true" disabled="#{ServiceBean.xml » par la déclaration de deux propriétés.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. 42 Dghaies jihed – Tutoriel développement des applications web J2EE .crud_panel" value="Annuler" action="#{ServiceBean.panelinfo.crud_panel" value="Nouveau" action="#{ServiceBean.panelinfo.etat}" id="descrserv" value="#{ServiceBean. 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.modifier}"style="width:85px"/> <a4j:commandButton id="suppserv" ajaxSingle="true" disabled="#{ServiceBean.invetat}" reRender="infomsg.etat}" reRender="infomsg. 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).panelinfo.serv.create}" style="width:85px"/> <a4j:commandButton id="annulserv" ajaxSingle="true" disabled="#{ServiceBean.servCode}"size="25" maxlength="30"> </h:inputText> <h:outputText value="Libellé : " /> <h:inputText disabled="#{ServiceBean.

util. import java.util. Le code de bean Personne : package Beans. private InterfaceService servService. import java. import Interfaces. 43 Dghaies jihed – Tutoriel développement des applications web J2EE .ArrayList. import org. import java.List.Service.Hashtable.richfaces.io. private InterfaceService persService.util.InterfaceService.util.UIDataTable.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.Serializable. import Entity. import java. import java.Personnel.component. /** * @author Jihed */ 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é. public class PersonnelBean extends messageBean implements Serializable { private Personnel pers.Iterator.

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

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

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

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

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

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

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

backgroundColor='#{org.style.etat}" size="25" maxlength="30"> </h:inputText> <h:outputText value="Description : " /> <h:inputTextarea value="#{EquipementBean.eqLib}" disabled="#{EquipementBean.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.tableBackgroundColor}'" onRowClick="this.eqDescr}" disabled="#{EquipementBean.equip.equip.panelinfo.<h:form id="formequipement"> <a4j:include viewId="Entete.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/edit16.etat}" 51 Dghaies jihed – Tutoriel développement des applications web J2EE .style.tablepanel.style_message}"/> <rich:panel header="Liste Equipement" id="tablepanel"> <rich:dataTable onRowMouseOver="this.service.eqLib}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Etat" /> </f:facet> <h:outputText value="#{equip.message}" styleClass="#{EquipementBean.jsp"/> <h:inputHidden value="#{EquipementBean.modifierligne}" reRender="infomsg.style.richfaces.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.dataTable}" onRowMouseOut="this.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.SKIN.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.equip.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.etat}" value="#{EquipementBean.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.supprimer}" ajaxSingle="true" reRender="infomsg.panelinfo.eqEtat}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Service" /> </f:facet> <h:outputText value="#{equip."> <rich:tab label="Equipement"> <h:panelGrid width="450px" columns="1"> <h:outputText id="infomsg" value="#{EquipementBean.equip_list}" var="equip"> <rich:column> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="#{equip.tablepanel.jsp"/> <a4j:include viewId="menu.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{EquipementBean.backgroundColor='#B5CEFD'" binding="#{EquipementBean.

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

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

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

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

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

etat}" value="#{IntervBean.tablepanel.current_personnel}" suggestionValues="#{IntervBean.tablepanel.<rich:column > <f:facet name="header"> <h:outputText value="Intervenant" /> </f:facet> <h:outputText value="#{interv.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.current_equipement}" suggestionValues="#{IntervBean.crud_panel"/> <a4j:commandButton id="validinterv" value="Valider" style="width:85px" disabled="#{IntervBean.tablepanel.panelinfo.intervDate}" popup="true" datePattern="dd/MM/yyyy" cellWidth="24px" cellHeight="22px" disabled="#{IntervBean.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.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.create}" reRender="infomsg.modifierligne}" reRender="infomsg.tablepanel.persNom} #{interv.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.tablepanel.etat}"action="#{IntervBean.crud_panel"/> <a4j:commandButton id="modifinterv" value="Modifier" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.personnel.panelinfo.modifier}" reRender="infomsg.person_list}" required="true"> </rich:comboBox> <h:outputText value="Date intervention : " /> <rich:calendar id="foFiscal" value="#{IntervBean.interv.crud_panel"/> <a4j:commandButton id="suppinterv" value="Supprimer" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.crud_panel"> <h:graphicImage style="border:0" url="/images/ajax/delete16.supprimer}" reRender="infomsg.panelinfo.viderchamps}" reRender="infomsg.etat}" value="#{IntervBean.panelinfo.invetat}"action="#{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.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.tablepanel.annuler}" reRender="infomsg.etat}"action="#{IntervBean.equip_list}" > </rich:comboBox> <h:outputText value="Intervenant : " /> <rich:comboBox id="persinterv" defaultLabel="Entrez une valeur" disabled="#{IntervBean.crud_panel"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> 57 Dghaies jihed – Tutoriel développement des applications web J2EE .panelinfo.crud_panel"/> <a4j:commandButton id="annulinterv" value="Annuler" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.invetat}"action="#{IntervBean.personnel.supprimer}" ajaxSingle="true" reRender="infomsg.

</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

import Entity. String pass). import Interfaces. import Interfaces.AuthenticationDAO. return pers.dao. /** * @author Jihed */ public class AuthenticationDaoImpl extends HibernateDaoSupport implements AuthenticationDAO { public Personnel findByLoginAndPassword(String login. import Entity. /** * @author Jihed */ import Entity.persPassword ='" + pass + "'").Personnel. } Puis on passe à l’implémentation package Implementation.Personnel. import Entity.support.HibernateDaoSupport.hibernate3.AuthenticationService. import org. String pass) { 61 Dghaies jihed – Tutoriel développement des applications web J2EE . /** * @author Jihed */ public interface AuthenticationDAO { public Personnel findByLoginAndPassword(String login.find(" from Personnel pers where pers.2. } catch (Exception re) { re.AuthenticationDAO.Personnel. On commence par la création des deux interfaces DAO et Service pour ce bean. 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. } } } ------------------------------------------------package Implementation.Personnel. } package Interfaces. package Interfaces. String pass).printStackTrace(). public interface AuthenticationService { public Personnel findByLoginAndPassword(String login.persLogin ='" + login + "' and pers.get(0).orm. String pass) { try { Personnel pers = (Personnel) getHibernateTemplate(). public class AuthenticationServiceImpl implements AuthenticationService { private AuthenticationDAO loginDao.springframework. import Interfaces.service. public Personnel findByLoginAndPassword(String login. return null.

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

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

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

01 Transitional//EN" "http://www.location.pers.sun.location. 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. 21:47:07 Author : jihed --%> <%@taglib uri="http://richfaces.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 .com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.requestContextPath}/faces/Authentification.deconnecter}" id="dec_btn" image="/images/ajax/lock.5.service.persPrenom}" styleClass="titre_bleu"/> <rich:spacer width="6px"/> <h:outputText value=" | " styleClass="titre2"/> <rich:spacer width="6px"/> <h:outputText id="service" value="#{LoginBean.externalContext. 2010.w3.org/TR/html4/loose.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.href='#{facesContext.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.requestContextPath}/faces/Authentification.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.dtd"> <h:panelGrid columns="12" > <rich:spacer width="50px"/> <h:outputText id="dtjr" value="#{LoginBean. <%-Document : Entete Created on : 25 janv.persNom} #{LoginBean.gif" onclick="document.href='#{facesContext.pers.pers.sun.jsp'" > <rich:toolTip showDelay="500"> Acceuil </rich:toolTip> </a4j:commandButton> <rich:spacer width="2px"/> <a4j:commandButton action="#{LoginBean.today}" styleClass="titre_gris"/> <rich:spacer width="225px"/> <h:outputText id="user" value="#{LoginBean.externalContext.gif" onclick="document.

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

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

Cliquez dessus.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).nous allons faire le deploiement sur le serveur tomcat qui est installé localement . Il devrait y avoir un lien à gauche Tomcat Manager. 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. 68 Dghaies jihed – Tutoriel développement des applications web J2EE .

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

Sign up to vote on this title
UsefulNot useful