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

org/richfaces/download/stable.2.3.SR1) à partir de cette adresse : http://www. Le fichier téléchargé est un fichier zip qui contient la documentation technique de l’api ainsi que les librairies RichFaces (3 fichier .jboss.html. 5 Dghaies jihed – Tutoriel développement des applications web J2EE . 5) Télécharger la dernière version stable de RichFaces (RichFaces 3. Créer un nouveau projet : Choisir java webweb application Donner un nom à votre projet.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 ».jar dans le dossier lib).

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. 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. Dans cet onglet on trouve les libraries utilisées dans notre projet on sélectionne la librairie RichFaces puis on clique sur « edit ».my. 7 Dghaies jihed – Tutoriel développement des applications web J2EE .jsp » et un package « org.xml et le fichier faces-config.richfaces » contenant un managed bean appelé « RichFacesBean». 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. Dans les propriétés du projet (bouton droitpropriétés) on choisit « Libraries ».

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

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

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

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

</f:facet> <h:outputText value="" /> </rich:column> <rich:column width="230px"> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink > <h:graphicImage style="border:0"url="/images/ajax/edit16.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink onclick="if(confirm('Voulez vous confirmer la suppression?') == false ) return false.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 ." > <h:graphicImage style="border:0" url="/images/ajax/delete16.

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

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

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

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 .tableBackgroundColor}'" onRowClick="this.richfaces.style." > <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.backgroundColor='#{org.style.<rich:dataTable onRowMouseOver="this.SKIN.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.backgroundColor='#B5CEFD'" onRowMouseOut="this.

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

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

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

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

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

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 .

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. La validation de cette étape génère un fichier « hibernate.cfg.reveng.xml » 24 Dghaies jihed – Tutoriel développement des applications web J2EE .

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

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

On valide par « add library » 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 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

nous allons faire le deploiement sur le serveur tomcat qui est installé localement . Cliquez dessus. sur la page d'index de Tomcat. L’url par défaut est « http://localhost:8080 » mais on peut changer le numéro de port .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). Il devrait y avoir un lien à gauche Tomcat Manager. 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/. Donc dans notre exemple. 69 Dghaies jihed – Tutoriel développement des applications web J2EE . Sélectionnez votre WAR à l'aide du bouton browse et cliquez sur le bouton “Deploy”. Allez au bas de la page dans la section “WAR file to deploy”. L’application est maintenant déployée.La page « tomcat manager » contient la liste des applications présentes sur le serveur. l'url de l'application sera le nom de l'archive (WAR) sans l'extension.

Sign up to vote on this title
UsefulNot useful