Développement des applications Web avec Spring, hibernate et Richfaces

par DGHAIES Jihed (Accueil)
Date de publication : 05.03.2010 Dernière mise à jour : 05.03.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ée sur le serveur apache tomcat 6.0.18. Le document contient beaucoup de code rendant possible le copier / coller.

Développement des applications Web avec Spring, hibernate et Richfaces par DGHAIES Jihed (Accueil)

1 2 3 4

5 6

7

8

9

But de Tutoriel........................................................................................................................................................3 Structure de la base de données.......................................................................................................................... 3 Création du Projet..................................................................................................................................................4 Création des Interfaces Graphiques...................................................................................................................... 9 4.1 - Page Authentification..................................................................................................................................... 9 4.2 - Page entête................................................................................................................................................. 10 4.3 - Page Menu.................................................................................................................................................. 11 4.4 - Page Services..............................................................................................................................................12 4.5 - Page Personnel........................................................................................................................................... 14 4.6 - Page Equipement........................................................................................................................................ 16 4.7 - Page interventions....................................................................................................................................... 18 - Génération des fichiers de mapping....................................................................................................................20 - Intégration de Spring........................................................................................................................................... 28 6.1 - Ajout de la librairie Spring........................................................................................................................... 28 6.2 - Création du fichier de configuration............................................................................................................ 30 6.3 - Création de la couche Service et la couche DAO...................................................................................... 34 - Création des « managed Beans »....................................................................................................................... 40 7.1 - Managed Bean pour la Classe Service.......................................................................................................40 7.2 - Liaison avec la page Service...................................................................................................................... 43 7.3 - Managed Bean pour la Classe Personnel.................................................................................................. 45 7.4 - Liaison avec la page Personnel.................................................................................................................. 48 7.5 - Managed Bean pour la Classe Equipement............................................................................................... 50 7.6 - Liaison avec la page Equipement............................................................................................................... 53 7.7 - Managed Bean pour la Classe Interventions.............................................................................................. 55 7.8 - Liaison avec la page Interventions..............................................................................................................59 7.9 - Fichier de confiuration « Faces-config »..................................................................................................... 61 7.10 - Diagramme de l'aplication ........................................................................................................................ 62 - Gestion de l'accés à l'aplication.......................................................................................................................... 62 8.1 - Changement de la page d'aceuil.................................................................................................................62 8.2 - Création du bean «AuthenticationBean »....................................................................................................63 8.3 - Liaison avec la page Authentification..........................................................................................................66 8.4 - Ajout des « navigation rules »..................................................................................................................... 66 8.5 - Changement de la page entete...................................................................................................................67 - Deploiement de l'application................................................................................................................................ 68 9.1 - Création du fichier war................................................................................................................................ 68 9.2 - Déployer l'application...................................................................................................................................69

-

-2Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
http://dghaies-jihed.developpez.com/javaee/spring/

Développement des applications Web avec Spring, hibernate et Richfaces par DGHAIES Jihed (Accueil)

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

2 - Structure de la base de données

Structure de la base

-- 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, `pers_nom` varchar(15) NOT NULL default '', `pers_prenom` varchar(15) NOT NULL default '', `pers_login` varchar(8) NOT NULL default '', `pers_password` varchar(6) NOT NULL default '', `pers_droit` varchar(5) NOT NULL default '', `pers_serv` char(3) NOT NULL default '', PRIMARY KEY (`pers_id`),

-3Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
http://dghaies-jihed.developpez.com/javaee/spring/

Création du Projet Pour pouvoir utiliser RichFaces il faut ajouter ce plugin à NetBeans • Télécharger le plugin RichFaces pour NetBeans à partir de cette adresse: http://plugins.Contraintes pour la table `personnel` ALTER TABLE `personnel` ADD CONSTRAINT `personnel_ibfk_1` FOREIGN KEY (`pers_serv`) REFERENCES `service` (`serv_code`). hibernate et Richfaces par DGHAIES Jihed (Accueil) Structure de la base KEY `pers_serv` (`pers_serv`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 .Contraintes pour les tables exportées -. KEY `interv_eq` (`interv_eq`). modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. http://dghaies-jihed.jsp?pluginid=8934 Le fichier téléchargé est un fichier ZIP qui contient 2 fichiers . 3 . -. -.developpez.developpez.org/ PluginPortal/faces/PluginDetailPage. `interv_pers` int(3) NOT NULL default '0'. ADD CONSTRAINT `interventions_ibfk_1` FOREIGN KEY (`interv_pers`) REFERENCES `personnel` (`pers_id`). -.com et reste la propriété exclusive de son auteur.Contraintes pour la table `equipement` ALTER TABLE `equipement` ADD CONSTRAINT `equipement_ibfk_1` FOREIGN KEY (`eq_serv`) REFERENCES `service` (`serv_code`). `interv_date` date NOT NULL default '0000-00-00'. `interv_eq` int(3) NOT NULL default '0'.Structure de la table `interventions` CREATE TABLE `interventions` ( `interv_id` int(3) NOT NULL auto_increment.netbeans. PRIMARY KEY (`interv_id`). -.nbm (module pour NetBeans) -4Ce document est issu de http://www. KEY `interv_pers` (`interv_pers`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 .Développement des applications Web avec Spring. La copie.com/javaee/spring/ .Contraintes pour la table `interventions` ALTER TABLE `interventions` ADD CONSTRAINT `interventions_ibfk_2` FOREIGN KEY (`interv_eq`) REFERENCES `equipement` (`eq_id`).

developpez. Le fichier téléchargé est un fichier zip qui contient la documentation technique de l'api ainsi que les librairies RichFaces (3 fichier . hibernate et Richfaces par DGHAIES Jihed (Accueil) • • Décompresser l'archive zip pour extraire ces 2 fichiers.2.jboss. -5Ce document est issu de http://www. • Télécharger la dernière version stable de RichFaces (RichFaces 3. La copie.html. Ouvrir NetBeans puis dans l'onglet « tools » choisir « plugins ».jar dans le dossier lib).Développement des applications Web avec Spring. • Dans l'onglet « downloaded » cliquer sur « add plugin » et spécifier le chemin des 2 fichiers qu'on a décompressé dans l'étape 2 puis cliquer sur « Install ».org/richfaces/download/stable. http://dghaies-jihed.com/javaee/spring/ .developpez. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com et reste la propriété exclusive de son auteur.SR1) à partir de cette adresse : http:// www.3.

com et reste la propriété exclusive de son auteur. http://dghaies-jihed. hibernate et Richfaces par DGHAIES Jihed (Accueil) Créer un nouveau projet : Choisir java webweb application Donner un nom à votre projet. La copie.developpez.developpez.com/javaee/spring/ .Développement des applications Web avec Spring. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. -6Ce document est issu de http://www.

com/javaee/spring/ .Développement des applications Web avec Spring.developpez. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.developpez. hibernate et Richfaces par DGHAIES Jihed (Accueil) Spécifier le serveur à utiliser (Apache tomcat) et la version de JAVA EE (JAVA EE 5). La copie. Choisir les Framework JSF et Richfaces puis cliquer sur « Finish » -7Ce document est issu de http://www. http://dghaies-jihed.com et reste la propriété exclusive de son auteur.

com et reste la propriété exclusive de son auteur. Si vous ouvrez le fichier web. -8Ce document est issu de http://www. Dans cet onglet on trouve les libraries utilisées dans notre projet on sélectionne la librairie RichFaces puis on clique sur « edit ».jsp » et un package « org.Développement des applications Web avec Spring. http://dghaies-jihed.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. 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.developpez. La copie.com/javaee/spring/ . hibernate et Richfaces par DGHAIES Jihed (Accueil) Maintenant vous avez crée votre premier projet Web.xml et le fichier faces-config.developpez.richfaces » contenant un managed bean appelé « RichFacesBean». Pour le moment on va utiliser seulement les frameworks JSF/ Richfaces pour concevoir les interfaces graphiques de notre application. Dans les propriétés du projet (bouton droitpropriétés) on choisit « Libraries ».my. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Développement des applications Web avec Spring.1 .com/javaee/spring/ .developpez. http://dghaies-jihed.com et reste la propriété exclusive de son auteur. La copie. hibernate et Richfaces par DGHAIES Jihed (Accueil) Clique ensuite sur « add jar/folder » et choisir les 3 fichiers .Page Authentification h:outputTexth:inputSecreta4j:commandButtonnputSecreth:inputTextRich :panel -9Ce document est issu de http://www.Création des Interfaces Graphiques Cette application sera constituée de 7 pages Web : • • • • • • • Page Authentification Page entête page Menu page Service page Personnel page équipement page personnel 4. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. 4 .jar contenu dans le fichier ZIP qu'on a téléchargé dans l'étape 5.developpez.

dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.requestContextPath}/images/ajax/userauth. 2010.10 Ce document est issu de http://www.developpez.sun.2 .Page entête La page entête sera inclut dans les Pages : service. interventions.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. . background-repeat:no-repeat.background-position:-35px -15px.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces. équipement et personnel Page entête <%-- ." 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 :" /> 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> <h:inputSecret 4. charset=UTF-8"> <title>Authentification</title> </head> <body > <rich:spacer height="200px"></rich:spacer> <center > <rich:panel style="background-image:url(#{facesContext.developpez.01 Transitional//EN" "http://www.com/jsf/core"%> <%@taglib prefix="h" uri="http://java. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. 21:30:57 Author : jihed --%> <%@taglib uri="http://richfaces.externalContext.org/TR/html4/loose. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Authentification <%-Document : Authentification Created on : 25 janv.com et reste la propriété exclusive de son auteur.sun.width:400px.Développement des applications Web avec Spring. http://dghaies-jihed. La copie.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.w3.com/javaee/spring/ .

org/TR/html4/loose.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.Page Menu La page menu sera inclut dans les Pages : service.developpez. 21:47:07 Author : jihed 4.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.href='/TP-JSF/faces/Service. interventions.w3. 2010.Développement des applications Web avec Spring.developpez.location. équipement et personnel Page Menu <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://richfaces.sun.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.com/jsf/core"%> <%@taglib prefix="h" uri="http://java. La copie. http://dghaies-jihed.com et reste la propriété exclusive de son auteur.11 Ce document est issu de http://www.gif"> <rich:toolTip showDelay="500"> Déconnexion </rich:toolTip> </a4j:commandButton> </h:panelGrid> </h:form> </h:panelGrid> Document : Entete Created on : 25 janv.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.3 .01 Transitional//EN" "http://www. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.gif"> <rich:toolTip showDelay="500"> Acceuil </rich:toolTip> </a4j:commandButton> <rich:spacer width="2px"/> <a4j:commandButton id="dec_btn" image="/images/ajax/lock.com/javaee/spring/ . hibernate et Richfaces par DGHAIES Jihed (Accueil) Page entête --%> <%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.jsp'"/> </rich:dropDownMenu> <rich:dropDownMenu> <f:facet name="label"> <h:panelGrid cellpadding="0" cellspacing="0" columns="5" style="vertical-align:middle"> <h:outputText value="Personnel" /> </h:panelGrid> </f:facet> .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.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.sun.sun.

La copie. 2009.location. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.4 .com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.sun.w3.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. http://dghaies-jihed.href='/TP-JSF/faces/Interventions.location.href='/TP-JSF/faces/Equipement.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.Développement des applications Web avec Spring.com/jsf/core"%> <%@taglib prefix="h" uri="http://java. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Menu <rich:menuItem submitMode="none" value="Gestion Personnel" onclick="document.sun.org/TR/html4/loose.Page Services Page Services <%-Document : Service Created on : 12 déc.developpez.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.com/javaee/spring/ . 23:46:35 Author : jihed --%> <%@taglib uri="http://richfaces.12 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.dtd"> .jsp'"/> </rich:dropDownMenu> </rich:toolBar> 4.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.01 Transitional//EN" "http://www.href='/TP-JSF/faces/Personnel.location.

css"/> <title>Service</title> </head> <body> <h:form id="formservice"> <a4j:include viewId="Entete.SKIN."> <rich:tab label="Services"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Services" > <rich:dataTable onRowMouseOver="this.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.style.13 Ce document est issu de http://www.com/javaee/spring/ . hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Services <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.jsp"/> <a4j:include viewId="menu.backgroundColor='#{org.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink onclick="if(confirm('Voulez vous confirmer la suppression?') == false ) return false.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="serv"> <rich:column> <f:facet name="header"> <h:outputText value="Code" /> </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. La copie. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.tableBackgroundColor}'" onRowClick="this.style.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Code Service : " /> <h:inputText id="codserv" value=""size="25" maxlength="30"> </h:inputText> <h:outputText value="Libellé : " /> <h:inputText value="" id="libserv" size="25" maxlength="30" /> <h:outputText value="Description : " /> <h:inputText id="descrserv" value="" size="25" maxlength="50" /> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvserv" value="Nouveau" style="width:85px"/> .developpez.richfaces.com et reste la propriété exclusive de son auteur.backgroundColor='#B5CEFD'" onRowMouseOut="this.style.developpez. http://dghaies-jihed.Développement des applications Web avec Spring." > <h:graphicImage style="border:0" url="/images/ajax/delete16.

org/TR/html4/loose. 2010.14 Ce document est issu de http://www.Page Personnel Page Personnel <%-Document : Personnel Created on : 25 janv.jsp"/> <rich:spacer height="50px" /> .org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.Développement des applications Web avec Spring.com/javaee/spring/ .com/jsf/core"%> <%@taglib prefix="h" uri="http://java.jsp"/> <a4j:include viewId="menu.css"/> <title>Personnel</title> </head> <body> <h:form id="formpersonnel"> <a4j:include viewId="Entete.01 Transitional//EN" "http://www.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.com et reste la propriété exclusive de son auteur.sun.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. http://dghaies-jihed.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.sun. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Services <a4j:commandButton <a4j:commandButton <a4j:commandButton <a4j:commandButton </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> id="modifserv" value="Modifier" style="width:85px"/> id="suppserv" value="Supprimer" style="width:85px"/> id="validserv" value="Valider" style="width:85px"/> id="annulserv" value="Annuler" style="width:85px"/> 4. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.developpez.5 .developpez. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.w3. La copie.

http://dghaies-jihed.developpez."> <rich:tab label="Personnel"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Personnel" > <rich:dataTable onRowMouseOver="this.developpez.Développement des applications Web avec Spring.style.com/javaee/spring/ .tableBackgroundColor}'" onRowClick="this.style.backgroundColor='#{org.com et reste la propriété exclusive de son auteur.15 Ce document est issu de http://www.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" /> . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.backgroundColor='#B5CEFD'" onRowMouseOut="this. La copie.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="pers"> <rich:column> <f:facet name="header"> <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.richfaces. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Personnel <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px.style.SKIN." > <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.

sun.developpez.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.org/TR/html4/loose.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.01 Transitional//EN" "http://www.Page Equipement Page Equipement <%-Document : Equipement Created on : 25 janv. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com/javaee/spring/ . 2010. http://dghaies-jihed.developpez.16 Ce document est issu de http://www.w3.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.sun.6 .com/jsf/core"%> <%@taglib prefix="h" uri="http://java.Développement des applications Web avec Spring. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Personnel <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"/> <a4j:commandButton id="annulpers" value="Annuler" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 4. La copie.com et reste la propriété exclusive de son auteur.dtd"> <f:view> <html> <head> .

modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.style.style.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="equip"> <rich:column> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Etat" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Service" /> </f:facet> <h:outputText value="" /> </rich:column> <rich:column style="text-align:center"> <f:facet name="header"> <h:outputText value="Modifier" /> </f:facet> <a4j:commandLink > <h:graphicImage style="border:0"url="/images/ajax/edit16.developpez.style. La copie.jsp"/> <a4j:include viewId="menu. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Equipement <meta http-equiv="Content-Type" content="text/html.SKIN.Développement des applications Web avec Spring."> <rich:tab label="Equipement"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Equipement" > <rich:dataTable onRowMouseOver="this.backgroundColor='#B5CEFD'" onRowMouseOut="this.css"/> <title>Equipement</title> </head> <body> <h:form id="formequipement"> <a4j:include viewId="Entete.richfaces. http://dghaies-jihed.com et reste la propriété exclusive de son auteur. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.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" /> .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.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px.backgroundColor='#{org." > <h:graphicImage style="border:0" url="/images/ajax/delete16.tableBackgroundColor}'" onRowClick="this.17 Ce document est issu de http://www.com/javaee/spring/ .developpez.

charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.Page interventions Page interventions <%-Document : Intervention Created on : 25 janv.18 Ce document est issu de http://www.sun.developpez.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.css"/> <title>Intervention</title> </head> .com/jsf/core"%> <%@taglib prefix="h" uri="http://java.7 . hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Equipement </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> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 4. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.01 Transitional//EN" "http://www. La copie.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html. http://dghaies-jihed. 2010.w3. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.Développement des applications Web avec Spring.sun.developpez.com/javaee/spring/ .com et reste la propriété exclusive de son auteur.org/TR/html4/loose.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.

style.com et reste la propriété exclusive de son auteur.backgroundColor='#{org.jsp"/> <rich:spacer height="50px" /> <h:outputText id="infomsg" value="" styleClass="valid_message"/> <center> <rich:tabPanel style="width:500px. La copie. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page interventions <body> <h:form id="formintervention"> <a4j:include viewId="Entete."> <rich:tab label="Intervention"> <h:panelGrid width="450px" columns="1"> <rich:panel header="Liste Interventions" > <rich:dataTable onRowMouseOver="this.style.19 Ce document est issu de http://www.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" </rich:comboBox> <h:outputText value="Intervenant : " /> value="" required="true"> <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" /> .SKIN.developpez. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="" var="interv"> <rich:column> <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.richfaces.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. http://dghaies-jihed.jsp"/> <a4j:include viewId="menu.developpez.backgroundColor='#B5CEFD'" onRowMouseOut="this.com/javaee/spring/ ." > <h:graphicImage style="border:0" url="/images/ajax/delete16.Développement des applications Web avec Spring.tableBackgroundColor}'" onRowClick="this.style.

com/javaee/spring/ .developpez.cfg.xml » . hibernate et Richfaces par DGHAIES Jihed (Accueil) Page interventions </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> 5 . http://dghaies-jihed. On commencera par la création de fichier de configuration d'Hibernate « hibernate. La copie.Développement des applications Web avec Spring.20 Ce document est issu de http://www.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.developpez. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com et reste la propriété exclusive de son auteur.

com/javaee/spring/ . La copie.Développement des applications Web avec Spring.com et reste la propriété exclusive de son auteur. hibernate et Richfaces par DGHAIES Jihed (Accueil) .developpez.21 Ce document est issu de http://www. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.developpez. http://dghaies-jihed.

22 Ce document est issu de http://www.com et reste la propriété exclusive de son auteur. hibernate et Richfaces par DGHAIES Jihed (Accueil) . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. La copie. http://dghaies-jihed.com/javaee/spring/ .Développement des applications Web avec Spring.developpez.developpez.

Développement des applications Web avec Spring, hibernate et Richfaces par DGHAIES Jihed (Accueil)

Si on clique sur « ok » le fichier « hibernate.cfg.xml » sera crée dans le package par défaut « default package » ce fichier contient les paramètres de connexion à la base(dialecte, pilote de la base de données , url ,utilisateur, mot de passe)

Les librairies de Hibernate ainsi que le driver de MySQL seront ajoutées automatiquement dans la configuration de notre projet.

- 23 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
http://dghaies-jihed.developpez.com/javaee/spring/

Développement des applications Web avec Spring, hibernate et Richfaces par DGHAIES Jihed (Accueil)

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»

- 24 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
http://dghaies-jihed.developpez.com/javaee/spring/

Développement des applications Web avec Spring, hibernate et Richfaces par DGHAIES Jihed (Accueil)

- 25 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
http://dghaies-jihed.developpez.com/javaee/spring/

developpez.com/javaee/spring/ .com et reste la propriété exclusive de son auteur.reveng.26 Ce document est issu de http://www. http://dghaies-jihed.Développement des applications Web avec Spring. hibernate et Richfaces par DGHAIES Jihed (Accueil) 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. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.xml » . La validation de cette étape génère un fichier « hibernate. La copie.developpez.

modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.cfg.java » générés dans ce package. La copie.27 Ce document est issu de http://www. http://dghaies-jihed. hibernate et Richfaces par DGHAIES Jihed (Accueil) La liste des fichiers de mapping crées seront ajoutés dans le fichier « hibernate.com/javaee/spring/ .developpez.com et reste la propriété exclusive de son auteur.developpez. .xml » 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.Développement des applications Web avec Spring.

La copie.Intégration de Spring 6.com/javaee/spring/ . . 6 . http://dghaies-jihed. Arborescence des classes du projet. hibernate et Richfaces par DGHAIES Jihed (Accueil) On valide le déplacement des fichiers en cliquant sur « Refactor ».1 .com et reste la propriété exclusive de son auteur.developpez.developpez.Ajout de la librairie Spring La premiére étape pour intégrer spring dans notre application web consiste à ajouter le librarairie de spring dans notre projet.28 Ce document est issu de http://www.Développement des applications Web avec Spring. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

http://dghaies-jihed.developpez.5 »puis on clique sur « import Library » .Développement des applications Web avec Spring.com/javaee/spring/ . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com et reste la propriété exclusive de son auteur.29 Ce document est issu de http://www.developpez. La copie. hibernate et Richfaces par DGHAIES Jihed (Accueil) On clique sur « add library » On clique sur « Import » On choisit le « Spring Framework 2.

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.com et reste la propriété exclusive de son auteur. hibernate et Richfaces par DGHAIES Jihed (Accueil) On valide par « add library » 6. .30 Ce document est issu de http://www.Développement des applications Web avec Spring.com/javaee/spring/ .developpez.developpez. http://dghaies-jihed. La copie. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

http://dghaies-jihed.com et reste la propriété exclusive de son auteur.31 Ce document est issu de http://www.com/javaee/spring/ . La copie.developpez.Développement des applications Web avec Spring. hibernate et Richfaces par DGHAIES Jihed (Accueil) Le fichier doit être crée dans le dossier « WEB-INF » .developpez. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

cfg.Développement des applications Web avec Spring.xml » ce qui rend ce fichier inutile et on pourra ainsi le supprimer. Ensuite on spécifie les paramètres de générateur de session « session factory ». hibernate et Richfaces par DGHAIES Jihed (Accueil) On va commencer par définir les paramètres de connexion à notre base de données. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. http://dghaies-jihed. Cette configuration consiste à spécifier les paramètres d'Hibernate. les fichiers de mapping utilisées et la classe responsable de la gestion de la session. La copie.com/javaee/spring/ .developpez.developpez.32 Ce document est issu de http://www. En effet le fichier de configuration de Spring contient les mêmes informations qui se trouvent dans le fichier « hibernate.com et reste la propriété exclusive de son auteur. .

33 Ce document est issu de http://www. Après avoir effectué les configurations de base dans le fichier « applicationContext » on déclare dans le descripteur de déploiement « web. On déclare le gestionnaire de transaction pour hibernate.developpez. hibernate et Richfaces par DGHAIES Jihed (Accueil) On va déclarer aussi le Bean de gestion des erreurs liées aux exceptions SQL.developpez. On déclare le Bean HibernateTemplate. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. La classe HibernateTemplate fournit des méthodes pour assurer la persistance des objets dans la base de données en utilisant Hibernate. Cette déclaration permet à JSF de voir les beans déclarés dans le fichier de configuration de Spring. . http://dghaies-jihed.xml » les configurations liées à l'utilisation de Spring.com et reste la propriété exclusive de son auteur.Développement des applications Web avec Spring.xml » la déclaration de l'utilisation de Spring.com/javaee/spring/ . La copie. On ajoute aussi dans le fichier « faces-config.

orm.save(serv).getHibernateTemplate(). http://dghaies-jihed.List.List.developpez. Delete : pour supprimer un enregistrement.34 Ce document est issu de http://www. public void delete(Object inst). /** * @author Jihed */ public interface InterfaceDAO { public void save(Object inst). Findall : pour récupérer la liste des enregistrements dans la base. import Interfaces.getHibernateTemplate().service » et « implementation. Modify : pour modifier un enregistrement existant. public List findAll(). import java.support. public void modify(Object inst). public void delete(Object inst). this. public void modify(Object inst). /** * @author Jihed */ public interface InterfaceService { public void save(Object inst).dao » Dans le package « implementation.dao.com et reste la propriété exclusive de son auteur.Création de la couche Service et la couche DAO On passe maintenant à la création de la couche Service et la couche DAO. } @Override . } On crée deux autres package « Implementation. public List findAll().util. hibernate et Richfaces par DGHAIES Jihed (Accueil) 6. import java. La copie. this. import Entity.3 . } InterfaceService package Interfaces.springframework. Dans notre exemple on va utiliser seulement 4 méthodes : Save : pour enregistrer les objets dans la base. } @Override public void modify(Object inst) { Service serv = (Service) inst. Les interfaces DAO et Service contiennet la définition des méthodes qu'on va utiliser.util.update(serv).Service. ServiceDaoImpl package Implementation. import org.developpez.util. import java.List.InterfaceDAO. On crée un nouveau package qu'on l'appellera « Interfaces » et on crée dedans deux interfaces « interfaceDAO » et « interfaceService ».HibernateDaoSupport. public class ServiceDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Service serv = (Service) inst.com/javaee/spring/ . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. InterfaceDAO package Interfaces.dao » on va implémenter l'interface DAO pour chaque classe de notre application.hibernate3.Développement des applications Web avec Spring.

Equipement. import Interfaces. this. } @Override public void delete(Object inst) { Equipement equip = (Equipement) inst.loadAll(Equipement. } @Override public void modify(Object inst) { Equipement equip = (Equipement) inst.util.getHibernateTemplate().springframework.35 Ce document est issu de http://www.delete(equip). this.HibernateDaoSupport.List.HibernateDaoSupport.hibernate3.getHibernateTemplate().getHibernateTemplate().hibernate3.getHibernateTemplate().save(pers). import java. } @Override public void delete(Object inst) { Personnel pers = (Personnel) inst.getHibernateTemplate(). public class InterventionsDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Interventions interv = (Interventions) inst.com/javaee/spring/ . } } EquipementDaoImpl package Implementation.Développement des applications Web avec Spring. this.Personnel.class). import java.dao.List. import org. } public List findAll() { return (List) this.List.springframework.support. import Entity.springframework.delete(serv). hibernate et Richfaces par DGHAIES Jihed (Accueil) ServiceDaoImpl } public void delete(Object inst) { Service serv = (Service) inst. } public List findAll() { return (List) this.loadAll(Service.orm.getHibernateTemplate().getHibernateTemplate().getHibernateTemplate().getHibernateTemplate(). http://dghaies-jihed. this. this. this. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.class).InterfaceDAO. import Entity.Interventions.update(equip). import org. La copie. import Entity. import Interfaces. public class EquipementDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Equipement equip = (Equipement) inst.update(pers). public class PersonnelDaoImpl extends HibernateDaoSupport implements InterfaceDAO { @Override public void save(Object inst) { Personnel pers = (Personnel) inst. } public List findAll() { return (List) this. import Interfaces.class). } } InterventionsDaoImpl package Implementation.com et reste la propriété exclusive de son auteur.orm. } @Override public void modify(Object inst) { Personnel pers = (Personnel) inst.support. } PersonnelDaoImpl package Implementation.HibernateDaoSupport.dao.save(equip).hibernate3.developpez.InterfaceDAO.getHibernateTemplate().dao. import org.loadAll(Personnel.developpez.util.InterfaceDAO.support.delete(pers). import java. .orm. this.util.

} Après avoir créé la couche DAO on va passer à la création de la couche service. public class ServiceServiceImpl implements InterfaceService { private InterfaceDAO serviceDao. } } PersonnelServiceImpl package Implementation.class). hibernate et Richfaces par DGHAIES Jihed (Accueil) InterventionsDaoImpl } this.InterfaceDAO. serviceDao.Développement des applications Web avec Spring.InterfaceService.Service.List.com/javaee/spring/ . personnelDao.serviceDao = serviceDao.delete(serv).getHibernateTemplate(). } public List findAll() { return personnelDao.Personnel. } public List findAll() { return (List) this. } public InterfaceDAO getServiceDao() { return serviceDao. personnelDao. } public InterfaceDAO getPersonnelDao() { return personnelDao.InterfaceDAO.delete(pers).List. } public void modify(Object instance) { Service serv = (Service) instance. serviceDao. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. import Entity.36 Ce document est issu de http://www.loadAll(Interventions. this.util. public void save(Object instance) { Service serv = (Service) instance.developpez. } @Override public void delete(Object inst) { Interventions interv = (Interventions) inst. this.save(pers).service. Celle-ci fait appel à la couche DAO.save(serv).update(interv). import java.findAll().modify(pers). } public void delete(Object instance) { Service serv = (Service) instance. serviceDao.getHibernateTemplate(). http://dghaies-jihed. import java. } @Override public void modify(Object inst) { Interventions interv = (Interventions) inst. } public void modify(Object instance) { Personnel pers = (Personnel) instance. } public void setServiceDao(InterfaceDAO serviceDao) { this. La copie.com et reste la propriété exclusive de son auteur. import Interfaces. import Interfaces.modify(serv).delete(interv). } public void delete(Object instance) { Personnel pers = (Personnel) instance.personnelDao = personnelDao. public void save(Object instance) { Personnel pers = (Personnel) instance.service. personnelDao. ServiceServiceImpl package Implementation. } public List findAll() { return serviceDao.InterfaceService. } } .developpez.getHibernateTemplate(). import Interfaces.findAll().getHibernateTemplate().util. public class PersonnelServiceImpl implements InterfaceService { private InterfaceDAO personnelDao.save(interv). } public void setPersonnelDao(InterfaceDAO personnelDao) { this. import Entity. import Interfaces.

} public void delete(Object instance) { Interventions interv = (Interventions) instance.com/javaee/spring/ .util.InterfaceDAO. import Entity.delete(equip). public void save(Object instance) { Equipement equip = (Equipement) instance. import Interfaces.save(interv).util.InterfaceService. hibernate et Richfaces par DGHAIES Jihed (Accueil) EquipementServiceImpl package Implementation.findAll(). import Interfaces.service. import Entity. . } public InterfaceDAO getIntervDao() { return intervDao. } public void delete(Object instance) { Equipement equip = (Equipement) instance. } public void modify(Object instance) { Equipement equip = (Equipement) instance.modify(interv).save(equip).findAll().com et reste la propriété exclusive de son auteur.intervDao = intervDao.developpez.modify(equip). equipDao. public void save(Object instance) { Interventions interv = (Interventions) instance.delete(interv).Développement des applications Web avec Spring. intervDao.equipDao = equipDao. public class EquipementServiceImpl implements InterfaceService { private InterfaceDAO equipDao. } } Après avoir crée ces classes on va les déclarer dans le fichier de configuration de Spring.List.InterfaceService. } public void setEquipDao(InterfaceDAO equipDao) { this. } public List findAll() { return intervDao. equipDao. } public void setIntervDao(InterfaceDAO intervDao) { this. intervDao. import Interfaces.37 Ce document est issu de http://www. http://dghaies-jihed.List. equipDao. public class InterventionsServiceImpl implements InterfaceService { private InterfaceDAO intervDao. import java. intervDao. } public InterfaceDAO getEquipDao() { return equipDao. } public void modify(Object instance) { Interventions interv = (Interventions) instance.InterfaceDAO.Equipement. import java. } public List findAll() { return equipDao.developpez. import Interfaces. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. } } InterventionsServiceImpl package Implementation. La copie.service.Interventions.

springframework.com et reste la propriété exclusive de son auteur.springframework.springframework.hibernate.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.MySQLDialect</prop> <prop key="hibernate.org/schema/beans http://www. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.xml</value> <value>Mapping/Service. hibernate et Richfaces par DGHAIES Jihed (Accueil) Les beans DAO font référence au Bean hibernatetemplate tant disque les Beans services font références aux beans DAO associés.org/ schema/beans/spring-beans-2.hbm.xsd"> <!--Data Source Definition--> <bean id="dataSource" class="org.jdbc.developpez.jdbc.xml</value> <value>Mapping/Interventions.orm.springframework.org/schema/aop/springaop-2.dialect.xsd http://www.xml</value> <value>Mapping/Personnel.use_reflection_optimizer">true</prop> .springframework.springframework.dialect">org.hbm.springframework.5.show_sql">true</prop> <prop key="hibernate.hbm.org/schema/tx http://www.springframework.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.cglib.org/schema/aop" xmlns:tx="http://www.xml <?xml version="1. applicationContext.springframework.DriverManagerDataSource"> <property name="driverClassName"> <value>com.datasource.Développement des applications Web avec Spring.hibernate3.org/schema/tx/springtx-2.springframework.org/schema/p" xsi:schemaLocation="http://www.5.w3. http://dghaies-jihed.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>Mapping/Equipement.5.xsd http://www.org/schema/tx" xmlns:p="http://www.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop http://www.mysql.org/schema/beans" xmlns:xsi="http://www.com/javaee/spring/ .La déclaration des beans au niveau du fichier de configuration de Spring est terminé.38 Ce document est issu de http://www. La copie.hbm.developpez.

hibernate3.xml <prop key="hibernate.EquipementDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="intervDao" class="Implementation.EquipementServiceImpl"> <property name="equipDao" ref="equipDao"/> </bean> <bean id="intervService" class="Implementation.dao.39 Ce document est issu de http://www.cache.service. http://dghaies-jihed.hibernate.cache.dao.PersonnelServiceImpl"> <property name="personnelDao" ref="persDao"/> </bean> <bean id="equipService" class="Implementation.service.orm.jdbc.com/javaee/spring/ .provider_class">org. . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.developpez.hibernate3.InterventionsServiceImpl"> <property name="intervDao" ref="intervDao"/> </bean> </beans> Voici un shéma qui explique la relation entre les différents beans déclarés dans le fichier « applicationContext ».developpez.springframework. La copie.service.ServiceServiceImpl"> <property name="serviceDao" ref="serviceDao"/> </bean> <bean id="persService" class="Implementation.orm.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <!--========================= Start of DAO BEANS DEFINITIONS =========================--> <bean id="serviceDao" class="Implementation.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> <property name="jdbcExceptionTranslator"> <ref bean="jdbcExceptionTranslator"/> </property> </bean> <!--Hibernate Transaction Manager Definition--> <bean id="transactionManager" class="org.Développement des applications Web avec Spring.springframework.dao. hibernate et Richfaces par DGHAIES Jihed (Accueil) applicationContext.HashtableCacheProvider</prop> </props> </property> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!--Spring Data Access Exception Translator Defintion--> <bean id="jdbcExceptionTranslator" class="org.InterventionsDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <!--========================= Start of SERVICE BEANS DEFINITIONS =========================--> <bean id="servService" class="Implementation.PersonnelDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="equipDao" class="Implementation.dao.com et reste la propriété exclusive de son auteur.support.springframework.service.ServiceDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="persDao" class="Implementation.SQLErrorCodeSQLExceptionTranslator"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!--Hibernate Template Defintion--> <bean id="hibernateTemplate" class="org.

protected static String mess_op_false = "Opération échouée".Serializable.developpez.com et reste la propriété exclusive de son auteur.etat = !this. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. protected static String mess_del_true = "Suppression effectuée avec succès". import java. La copie.Managed Bean pour la Classe Service On va maintenant créer nos « managed Beans » ( Beans gérés par JSF).1 .40 Ce document est issu de http://www. Les Managed Bean vont hériter d'une classe qu'on l'appellera mesageBean et qui contiendra les messages à afficher dans l'application. hibernate et Richfaces par DGHAIES Jihed (Accueil) 7 . protected static String mess_modif_true = "Modification effectuée avec succès". protected boolean invetat = false.developpez. public void chageretat() { this. /** * @author Jihed */ public class messageBean implements Serializable { protected boolean etat = true. } //getters and setters } On passe maintenant à la création des managed Bean .io.etat.Création des « managed Beans » 7. protected String style_message. On crée un nouveau package qu'on l'appelle Beans.Développement des applications Web avec Spring. protected static String mess_insert_true = "Ajout effectué avec succès".etat.invetat = this.com/javaee/spring/ . http://dghaies-jihed. Puis on crée un Managed Bean pour chaque Classe Entity. this. MessageBean package Beans.

le Bean crée sera automatiquement déclaré dans le fichier « faces-config. /** * @author Jihed ServiceBean */ import Entity.Développement des applications Web avec Spring. import java. private boolean nouveau. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.ArrayList.UIDataTable.Serializable.com/javaee/spring/ .xml ». private List service_list = new ArrayList().util. private Integer index = 0. public class ServiceBean extends messageBean implements Serializable { private Service serv.com et reste la propriété exclusive de son auteur.developpez.InterfaceService. package Beans. private boolean init. private InterfaceService servService.Service. import org. import org. private UIDataTable dataTable.util.io. changeretat(). import Interfaces. hibernate et Richfaces par DGHAIES Jihed (Accueil) Si on valide. .component. import java.developpez. http://dghaies-jihed. public void viderchamps() { message = "".List.ajax4jsf.richfaces.KeepAlive.model. La copie. import java.41 Ce document est issu de http://www. private String message.

changeretat(). style_message = "valid_message". message = "". if (index > 0) { index--. nouveau = false. } public void modifierligne() { this.developpez.index = index. } public void modifier() { message = "". invetat = !etat. } etat = true.serv = (Service) dataTable. } public ServiceBean() { serv = new Service(). } public boolean isInit() { message = "". } public void annuler() { message = "". } changeretat().Développement des applications Web avec Spring. getService_list().getRowData(). hibernate et Richfaces par DGHAIES Jihed (Accueil) ServiceBean this. } public void supprimer() { try { this. if (!(service_list. style_message = "err_message". message = mess_modif_true.isEmpty()) { serv = (Service) service_list. message = mess_insert_true. serv = (Service) service_list. } } public Integer getIndex() { return index. } public void create() { if (nouveau) { try { this. changeretat(). changeretat(). style_message = "err_message". changeretat(). if (!service_list.isEmpty())) { service_list = (List) getService_list(). message = mess_op_false. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. message = mess_op_false.save(this. serv = (Service) service_list. } public void setIndex(Integer index) { this.printStackTrace(). message = mess_op_false.developpez. } } else { try { this.serv). } public void setInit(boolean init) { this. } } . http://dghaies-jihed.get(index).printStackTrace().42 Ce document est issu de http://www.serv = new Service().servService.get(index).com et reste la propriété exclusive de son auteur. La copie. message = mess_del_true.init = init. } catch (Exception hx) { hx. style_message = "valid_message".com/javaee/spring/ .printStackTrace().servService.servService. } catch (Exception hx) { hx. nouveau = false.delete(serv).get(0). style_message = "valid_message". } } catch (Exception hx) { hx. } service_list = (List) getService_list(). } else { viderchamps(). nouveau = true. service_list = (List) getService_list().modify(serv). return init.

modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.Liaison avec la page Service Maintenant on va lier nos interfaces graphiques avec les Beans crées. On commence par la page service.43 Ce document est issu de http://www.serv = serv. } public List getService_list() { service_list = this.servService = servService. On lie chaque input texte avec l'attribut de l'objet correspondant.service_list = service_list. hibernate et Richfaces par DGHAIES Jihed (Accueil) ServiceBean public String getMessage() { return message. } public void setMessage(String message) { this. } public UIDataTable getDataTable() { return dataTable.developpez. 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.2 . Pour chaque inputText on ajoute l'attribut « disabled » cet attribut permet de définir l'état du champ de saisie (actif ou grisé). 7.dataTable = dataTable.nouveau = nouveau. 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). } public void setNouveau(boolean nouveau) { this. http://dghaies-jihed.message = message. } public void setService_list(List service_list) { this.com/javaee/spring/ .com et reste la propriété exclusive de son auteur. } } 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.xml ». } public void setDataTable(UIDataTable dataTable) { this.servService.findAll().developpez. } public void setServService(InterfaceService servService) { this. } public boolean isNouveau() { return nouveau. . Or dans le fichier de configuration de spring on a spécifié les classes implémentant l'interface « InterfaceService » donc on ajoute une propriété à la déclaration du « ServiceBean » dans le fichier de configuration « faces-config. } public Service getServ() { return serv. La copie.servService.Développement des applications Web avec Spring. } public InterfaceService getServService() { return this. } public void setServ(Service serv) { this.

servCode}" /> </rich:column> <rich:column width="230px" > <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="#{serv.backgroundColor='#{org.tablepanel.style.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.sun.supprimer}" ajaxSingle="true" reRender="infomsg.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.panelinfo.richfaces.sun.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.css"/> <title>Service</title> </head> <body> <h:form id="formservice"> <a4j:include viewId="Entete.jsp"/> <h:inputHidden value="#{ServiceBean.01 Transitional//EN" "http://www.crud <h:graphicImage style="border:0" url="/images/ajax/delete16.w3.jsp"/> <a4j:include viewId="menu. http://dghaies-jihed. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.service_list}" var="serv" > <rich:column width="80px"> <f:facet name="header"> <h:outputText value="Code" /> </f:facet> <h:outputText value="#{serv. 23:46:35 Author : jihed --%> <%@taglib uri="http://richfaces.developpez.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.backgroundColor='#B5CEFD'" onRowMouseOut="this. 2009. La copie.tableBackgroundColor}'" onRowClick="this.modifierligne}" reRender="infomsg.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.developpez.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> ."> <rich:tab label="Services"> <h:outputText id="infomsg" value="#{ServiceBean.backgroundColor='#F1F1F1'" width="450px" rows="8" id="tbl" value="#{ServiceBean.org/TR/html4/loose.44 Ce document est issu de http://www.SKIN.Développement des applications Web avec Spring.style.dataTable}" onRowMouseOver="this.panelinfo.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.tablepanel.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.com/javaee/spring/ .init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.style.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.com et reste la propriété exclusive de son auteur.message}" styleClass="valid_message" /> <h:panelGrid width="450px" columns="1"> <rich:panel id="tablepanel" header="Liste Services" > <rich:dataTable binding="#{ServiceBean. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Service <%-Document : Service Created on : 12 déc.

panelinfo.tablepanel.xml » par la déclaration de deux propriétés. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Service <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="Code Service : " /> <h:inputText disabled="#{ServiceBean.3 .developpez.invetat}" reRender="infomsg.invetat}" reRender="infomsg.invetat}" reRender="infomsg. La copie.panelinfo.panelinfo.serv.serv. http://dghaies-jihed.etat}" id="descrserv" value="#{ServiceBean.com/javaee/spring/ .annuler}" style="width:85px"/> </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 7.developpez.com et reste la propriété exclusive de son auteur.panelinfo.45 Ce document est issu de http://www. 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.crud_panel" value="Modifier" action="#{ServiceBean. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.servLib}" id="libserv" size="25" maxlength <h:outputText value="Description : " /> <h:inputText disabled="#{ServiceBean.etat}" reRender="infomsg.tablepanel.servCode}"size="25" maxlengt </h:inputText> <h:outputText value="Libellé : " /> <h:inputText disabled="#{ServiceBean.crud_panel" value="Annuler" action="#{ServiceBean.tablepanel.crud_panel" value="Supprimer" action="#{ServiceBean.panelinfo.etat}" value="#{ServiceBean.tablepanel.create}" style="width:85px"/> <a4j:commandButton id="annulserv" ajaxSingle="true" disabled="#{ServiceBean.serv.viderchamps}" style="width:85px"/> <a4j:commandButton id="modifserv" ajaxSingle="true" disabled="#{ServiceBean.servDescr}" size="25" maxle </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvserv" ajaxSingle="true" disabled="#{ServiceBean.tablepanel.etat}" reRender="infomsg.supprimer}" style="width:85px"/> <a4j:commandButton id="validserv" disabled="#{ServiceBean.crud_panel" value="Valider" action="#{ServiceBean. . L'utilisation de deux interfaces se traduit dans le fichier « faces-config.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="Nouveau" action="#{ServiceBean.etat}" id="codserv" value="#{ServiceBean.modifier}"style="width:85px"/> <a4j:commandButton id="suppserv" ajaxSingle="true" disabled="#{ServiceBean.Développement des applications Web avec Spring.

.46 Ce document est issu de http://www.util.Personnel. hibernate et Richfaces par DGHAIES Jihed (Accueil) 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. this. public class PersonnelBean extends messageBean implements Serializable { private Personnel pers. /** * @author Jihed */ import Entity. import java. La copie. changeretat(). import Interfaces. private InterfaceService persService. private List service_list = new ArrayList(). private UIDataTable dataTable.Hashtable.Iterator.com et reste la propriété exclusive de son auteur. private List person_list = new ArrayList(). import Entity. private boolean init. 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é.developpez. import java.UIDataTable. PersonnelBean package Beans. import java.util.Service. private boolean nouveau.io.Développement des applications Web avec Spring.ArrayList.developpez. import java.List.util. import java. public void viderchamps() { message = "".InterfaceService. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com/javaee/spring/ . private InterfaceService servService. import org.pers = new Personnel().util. http://dghaies-jihed. private Hashtable servlist = new Hashtable().richfaces. private String message.Serializable. private Integer index = 0.component. private String current_service.

setService((Service) servlist.getService(). if (!(person_list.getServLib().printStackTrace(). } public boolean isInit() { message = "". chargercombo().setService(new Service()). } public void modifierligne() { this. http://dghaies-jihed. nouveau = false. } public void annuler() { message = "". nouveau = false. this. } } else { try { this. invetat = !etat.modify(pers). } etat = true. message = mess_op_false.pers.persService. message = mess_insert_true.pers).printStackTrace(). message = "". .47 Ce document est issu de http://www.pers. getServlist().save(this. } public PersonnelBean() { this.getRowData().pers = (Personnel) dataTable. style_message = "err_message". hibernate et Richfaces par DGHAIES Jihed (Accueil) PersonnelBean nouveau = true.com et reste la propriété exclusive de son auteur.developpez.} public void modifier() { message = "". message = mess_op_false.get(index).pers.get(0).developpez.get(current_service)). style_message = "err_message". changeretat(). getPerson_list(). } catch (Exception hx) { hx.Développement des applications Web avec Spring.getServCode() + "-" + this. this. chargercombo().pers. this. return init. pers = (Personnel) person_list. pers = (Personnel) person_list.pers. style_message = "valid_message".persService. } public void chargercombo() { current_service = this. message = mess_del_true.get(current_service)). } public void supprimer() { try { this. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. chargercombo(). message = mess_modif_true. person_list = (List) getPerson_list().isEmpty())) { person_list = (List) getPerson_list(). } public void create() { if (nouveau) { try { this. changeretat().setService((Service) servlist.com/javaee/spring/ .getService(). changeretat().pers = new Personnel(). style_message = "valid_message". La copie.persService. } } changeretat(). } catch (Exception hx) { hx.delete(pers). chargercombo().

chargercombo().org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.com et reste la propriété exclusive de son auteur.getServCode() + "-" + srv.message}" styleClass="valid_message"/> <h:panelGrid width="450px" columns="1"> <rich:panel id="tablepanel" header="Liste Personnel" > <rich:dataTable onRowMouseOver="this. srv). List l = this.clear().org/TR/html4/loose. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles. } } catch (Exception hx) { hx. } //geters and setters . } public Hashtable getServlist() { service_list.get(l.getServLib()).next())). if (!person_list.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px. it.clear(). hibernate et Richfaces par DGHAIES Jihed (Accueil) PersonnelBean } public List getPerson_list() { person_list = this.. http://dghaies-jihed.developpez.put(srv.get(index). if (index > 0) { index--.indexOf(it. return person_list.persService.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.01 Transitional//EN" "http://www. 2010.findAll()..dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.w3.printStackTrace().isEmpty()) { pers = (Personnel) person_list.css"/> <title>Personnel</title> </head> <body> <h:form id="formpersonnel"> <a4j:include viewId="Entete.servService.sun. La copie."> <rich:tab label="Personnel"> <h:outputText id="infomsg" value="#{PersonnelBean. service_list. for (Iterator it = l.getServLib().getServCode() + "-" + srv.jsp"/> <h:inputHidden value="#{PersonnelBean.) { Service srv = (Service) l. } person_list = (List) getPerson_list(). servlist.jsp"/> <a4j:include viewId="menu.sun. servlist.hasNext().iterator().backgroundColor='#B5CEFD'" binding="#{PersonnelBean.com/javaee/spring/ . } style_message = "valid_message".48 Ce document est issu de http://www.style. } else { viderchamps().add(srv. message = mess_op_false.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.developpez.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.Développement des applications Web avec Spring. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.dataTable}" .Liaison avec la page Personnel Page Personnel <%-Document : Personnel Created on : 25 janv. } 7. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces. } return servlist.4 .findAll().. changeretat().

persPrenom}" disabled="#{PersonnelBean.panelinfo.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Nom : " /> <h:inputText id="nompers" value="#{PersonnelBean.tableBackgroundColor}'" onRowClick="this.pers. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.persPassword}" 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.etat}" size="25 <h:outputText value="Droit : " /> <h:selectOneRadio id="drpers" value="#{PersonnelBean.person_list}" var="pers"> <rich:column> <f:facet name="header"> <h:outputText value="Nom" /> </f:facet> <h:outputText value="#{pers.modifierligne}" reRender="infomsg.cr <h:graphicImage style="border:0" url="/images/ajax/delete16.persDroit}" disabled="#{PersonnelBean.pers.persNom}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Prénom" /> </f:facet> <h:outputText value="#{pers.backgroundColor='#{org.developpez.etat}"> <f:selectItem itemLabel="Utilisateur" itemValue="user" /> <f:selectItem itemLabel="Administrateur" itemValue="admin" /> </h:selectOneRadio> .etat}" </h:inputText> <h:outputText value="Prénom : " /> size="25" maxle <h:inputText value="#{PersonnelBean.panelinfo.tablepanel.pers.49 Ce document est issu de http://www.SKIN.Développement des applications Web avec Spring.persPrenom}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Login" /> </f:facet> <h:outputText value="#{pers. http://dghaies-jihed.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16.developpez.etat}" id="prepers" size="25" ma <h:outputText value="Login : " /> <h:inputText id="logpers" value="#{PersonnelBean.persNom}"disabled="#{PersonnelBean.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{PersonnelBean.com et reste la propriété exclusive de son auteur.style.richfaces.pers.etat}" <h:outputText value="Password : " /> size="25" max <h:inputSecret id="pwdpers" value="#{PersonnelBean.pers.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.tablepanel.style.com/javaee/spring/ . La copie. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Personnel onRowMouseOut="this.persLogin}"disabled="#{PersonnelBean.supprimer}" ajaxSingle="true" reRender="infomsg.persLogin}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Droit" /> </f:facet> <h:outputText value="#{pers.

current_service}" > </rich:comboBox> </h:panelGrid> </rich:panel> </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton action="#{PersonnelBean.service_list}" defaultLabel="Entrez une valeur" value="#{PersonnelBean. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Personnel <h:outputText value="Service : " /> <rich:comboBox disabled="#{PersonnelBean.etat}" action="#{PersonnelBean.util. private boolean nouveau.io. private Hashtable servlist = new Hashtable().util.invetat}" action="#{PersonnelBean. private String current_service. import java. } public void annuler() { message = "".create}"reRender="info <a4j:commandButton id="annulpers" value="Annuler" style="width:85px" ajaxSingle="true" disabled="#{PersonnelBean.annuler}" reRender="inf </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 7.developpez.viderchamps}" id="nouvpers" value="Nouveau" ajaxSingle="true" style="width:85px" disabled="#{PersonnelBean. private InterfaceService equipService. equip_list = (List) getEquip_list(). private UIDataTable dataTable. import Entity.50 Ce document est issu de http://www. nouveau = true.ArrayList. /** * @author Jihed */ import Entity.sipprimer}"reRender <a4j:commandButton id="validpers" value="Valider" style="width:85px" disabled="#{PersonnelBean. private List equip_list = new ArrayList(). import java. La copie. import Interfaces.5 .com/javaee/spring/ . import org. public void viderchamps() { message = "". http://dghaies-jihed.tablep <a4j:commandButton id="modifpers" value="Modifier" style="width:85px" ajaxSingle="true" disabled="#{PersonnelBean. private InterfaceService servService.etat}" id="servpers" suggestionValues="#{PersonnelBean.invetat}" action="#{PersonnelBean.com et reste la propriété exclusive de son auteur. private String message. .Managed Bean pour la Classe Equipement EquipementBean package Beans.Equipement. import java.Développement des applications Web avec Spring.etat}"action="#{PersonnelBean. private boolean init. private List service_list = new ArrayList(). changeretat().UIDataTable.InterfaceService.component.richfaces.List.invetat}"reRender="infomsg. private Integer index = 0.Hashtable.Serializable. public class EquipementBean extends messageBean implements Serializable { private Equipement equip.Service.equip = new Equipement(). this.util. import java.developpez.Iterator. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. import java.modifier}" reRender <a4j:commandButton id="supppers" value="Supprimer" style="width:85px" ajaxSingle="true" disabled="#{PersonnelBean.util.

printStackTrace().getServCode() + "-" + this.delete(equip).51 Ce document est issu de http://www. } } else { try { this.developpez.setService((Service) servlist. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. message = mess_op_false.developpez. http://dghaies-jihed. this.com et reste la propriété exclusive de son auteur. } public EquipementBean() { this. nouveau = false. } public void modifierligne() { this.equip). style_message = "err_message".setService(new Service()). changeretat().Développement des applications Web avec Spring.setService((Service) servlist. message = mess_op_false. invetat = !etat.get(index).init = init.com/javaee/spring/ .equip. message = mess_insert_true. changeretat(). } catch (Exception hx) { hx.get(0). chargercombo(). style_message = "valid_message". La copie.modify(equip).equip.save(this.equip.equipService. } etat = true. } } changeretat(). } public boolean isInit() { message = "".getService().getServLib().printStackTrace(). } public void supprimer() { try { this.equipService. } public void create() { if (nouveau) { try { this.equip.isEmpty())) { equip_list = (List) getEquip_list().equip = (Equipement) dataTable. this. chargercombo(). return init. this. message = "". nouveau = false. getServlist().equip = new Equipement(). equip = (Equipement) equip_list. chargercombo().get(current_service)). style_message = "err_message".getService(). } public void setInit(boolean init) { this. . hibernate et Richfaces par DGHAIES Jihed (Accueil) EquipementBean } public void chargercombo() { equip = (Equipement) equip_list.get(current_service)). } catch (Exception hx) { hx. changeretat(). } public void modifier() { message = "".getRowData(). message = mess_modif_true.equipService.equip. style_message = "valid_message". if (!(equip_list. current_service = this. getEquip_list(). chargercombo().

52 Ce document est issu de http://www. } public String getMessage() { return message. hibernate et Richfaces par DGHAIES Jihed (Accueil) EquipementBean } public Integer getIndex() { return index.clear().next())). } } catch (Exception hx) { hx.developpez.index = index. List l = this.developpez. } public void setService_list(List service_list) { this. srv). } public void setIndex(Integer index) { this. for (Iterator it = l.findAll().message = message. return equip_list.get(index).add(srv.servService = servService. it. } equip_list = (List) getEquip_list(). } else { viderchamps().servService.get(l.findAll(). La copie. } . if (index > 0) { index--. chargercombo().equipService. } public Hashtable getServlist() { service_list.clear(). } public InterfaceService getServService() { return servService. } public UIDataTable getDataTable() { return dataTable.nouveau = nouveau.isEmpty()) { equip = (Equipement) equip_list. } public void setMessage(String message) { this. } public void setNouveau(boolean nouveau) { this. servlist. if (!equip_list.com et reste la propriété exclusive de son auteur.put(srv.hasNext().Développement des applications Web avec Spring. style_message = "valid_message".getServLib(). servlist.getServCode() + "-" + srv. } public boolean isNouveau() { return nouveau. } public void setServService(InterfaceService servService) { this.iterator().getServLib()).dataTable = dataTable.getServCode() + "-" + srv. http://dghaies-jihed. message = mess_op_false.printStackTrace(). } public void setServlist(Hashtable servlist) { . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.) { Service srv = (Service) l. service_list.service_list = service_list. } public List getEquip_list() { equip_list = this.com/javaee/spring/ message = mess_del_true.indexOf(it. changeretat(). } return servlist. } public List getService_list() { return service_list. } public void setDataTable(UIDataTable dataTable) { this.

init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px.equip = equip. } public void setCurrent_service(String current_service) { this.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java. } public InterfaceService getEquipService() { return equipService.Liaison avec la page Equipement Page equipement <%-Document : Equipement Created on : 25 janv. hibernate et Richfaces par DGHAIES Jihed (Accueil) EquipementBean } this.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. } 7.developpez.jsp"/> <a4j:include viewId="menu.css"/> <title>Equipement</title> </head> <body> <h:form id="formequipement"> <a4j:include viewId="Entete.53 Ce document est issu de http://www. } public Equipement getEquip() { return equip.com/jsf/core"%> <%@taglib prefix="h" uri="http://java. } public void setEquipService(InterfaceService equipService) { this.w3.com et reste la propriété exclusive de son auteur."> <rich:tab label="Equipement"> <h:panelGrid width="450px" columns="1"> . } public void setEquip(Equipement equip) { this.6 . } public String getCurrent_service() { return current_service. La copie. 2010.Développement des applications Web avec Spring.01 Transitional//EN" "http://www.sun.com/javaee/spring/ . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.org/TR/html4/loose. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.developpez. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.equipService = equipService.jsp"/> <h:inputHidden value="#{EquipementBean.sun.current_service = current_service.servlist = servlist. http://dghaies-jihed.

backgroundColor='#{org.eqDescr}" disabled="#{EquipementBean. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page equipement <h:outputText id="infomsg" value="#{EquipementBean.service.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.richfaces.etat}" size="25" maxl </h:inputText> <h:outputText value="Description : " /> <h:inputTextarea value="#{EquipementBean.eqLib}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Etat" /> </f:facet> <h:outputText value="#{equip.SKIN.dataTable}" onRowMouseOut="this.equip.backgroundColor='#B5CEFD'" binding="#{EquipementBean.style_message}"/> <rich:panel header="Liste Equipement" id="tablepanel"> <rich:dataTable onRowMouseOver="this.s </rich:comboBox> </h:panelGrid> </rich:panel> .crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16. La copie.eqEtat}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Service" /> </f:facet> <h:outputText value="#{equip.developpez.equip.tableBackgroundColor}'" onRowClick="this.modifierligne}" reRender="infomsg.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{EquipementBean.current_service}" suggestionValues="#{EquipementBean.tablepanel. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.equip.Développement des applications Web avec Spring.style.etat}" id="descrequip" rows= <h:outputText value="Etat : " /> <h:selectOneRadio id="etatequip" disabled="#{EquipementBean.equip_list}" var="equip"> <rich:column> <f:facet name="header"> <h:outputText value="Libellé" /> </f:facet> <h:outputText value="#{equip.etat}" value="#{EquipementBean.eqLib}" disabled="#{EquipementBean.panelinfo.c <h:graphicImage style="border:0" url="/images/ajax/delete16.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.supprimer}" ajaxSingle="true" reRender="infomsg.developpez.panelinfo.png" /> </a4j:commandLink> </rich:column> <rich:column style="text-align:center" width="70px"> <f:facet name="header"> <h:outputText value="Supprimer" /> </f:facet> <a4j:commandLink action="#{EquipementBean.com et reste la propriété exclusive de son auteur.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.message}" styleClass="#{EquipementBean.style.etat}" value="#{EquipementBean.style. http://dghaies-jihed.54 Ce document est issu de http://www.com/javaee/spring/ .

io.richfaces.create}" reRender="in <a4j:commandButton id="annulequip" value="Annuler" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean.etat}"action="#{EquipementBean.viderchamps}" reRe <a4j:commandButton id="modifequip" value="Modifier" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean. interv_list = (List) getEquip_list(). import Interfaces.interv = new Interventions(). private List interv_list = new ArrayList().Serializable.invetat}"action="#{EquipementBean.UIDataTable.etat}"action="#{EquipementBean. private List equip_list = new ArrayList(). private String current_equipement.component.ArrayList.Développement des applications Web avec Spring. changeretat(). import java.List. import java. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page equipement </h:panelGrid> <h:panelGrid id="crud_panel" columns="5"> <a4j:commandButton id="nouvequip" value="Nouveau" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean. private List person_list = new ArrayList().7 .Hashtable. import org. private InterfaceService intervService.annuler}" reRender="i </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> </f:view> 7. private InterfaceService persService.Iterator. private Integer index = 0.util. import Entity. this. import Entity.invetat}"action="#{EquipementBean. } public void annuler() { message = "". private UIDataTable dataTable. private String message. .55 Ce document est issu de http://www. private InterfaceService equipService. import java. private boolean init.Managed Bean pour la Classe Interventions InterventionsBean package Beans. public void viderchamps() { message = "".com/javaee/spring/ .util.supprimer}" reRender= <a4j:commandButton id="validequip" value="Valider" style="width:85px" disabled="#{EquipementBean.etat}"action="#{EquipementBean. import java.com et reste la propriété exclusive de son auteur.Personnel.modifier}" reRende <a4j:commandButton id="suppequip" value="Supprimer" style="width:85px"ajaxSingle="true" disabled="#{EquipementBean. private Hashtable perslist = new Hashtable().util.InterfaceService. La copie.util.developpez.Interventions. import Entity. interv = (Interventions) interv_list. private Hashtable equiplist = new Hashtable().Equipement. private String current_personnel. nouveau = true. http://dghaies-jihed.developpez.get(index). /** * * @author jihed */ public class InterventionsBean extends messageBean implements Serializable { private Interventions interv. private boolean nouveau. import java. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

message = mess_insert_true. message = mess_modif_true. style_message = "err_message".interv. style_message = "valid_message".printStackTrace().56 Ce document est issu de http://www.interv = (Interventions) dataTable. } public boolean isInit() { message = "". return init.get(current_equipement)).interv.get(current_personnel)). } .interv. current_equipement = this.intervService.interv.interv.interv. } catch (Exception hx) { hx.get(current_equipement)). message = mess_op_false. } } changeretat(). getPerslist(). chargercombo(). this.interv = new Interventions(). if (!(interv_list. } public void modifierligne() { this.setEquipement(new Equipement()). style_message = "valid_message".isEmpty())) { interv_list = (List) getInterv_list(). http://dghaies-jihed. invetat = !etat.get(current_personnel)). changeretat(). } public void setInit(boolean init) { this.com/javaee/spring/ . nouveau = false.getPersonnel(). getInterv_list().getPersNom() + "-" + this. message = mess_op_false. chargercombo().setPersonnel((Personnel) perslist.modify(interv). chargercombo(). } etat = true. } public void chargercombo() { current_personnel = this.getEquipement().com et reste la propriété exclusive de son auteur.getPersPrenom().get(0).Développement des applications Web avec Spring. } public void modifier() { message = "". } public void create() { if (nouveau) { try { this. this.getEqLib().printStackTrace(). style_message = "err_message".intervService. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. La copie.init = init. getEquiplist(). changeretat(). this. } public InterventionsBean() { this. hibernate et Richfaces par DGHAIES Jihed (Accueil) InterventionsBean changeretat().developpez.getPersonnel().developpez.interv). this.setEquipement((Equipement) equiplist. interv = (Interventions) interv_list.getRowData().interv.interv. message = "".save(this. } catch (Exception hx) { hx.setPersonnel((Personnel) perslist.setPersonnel(new Personnel()). } } else { try { this.interv. chargercombo(). nouveau = false.setEquipement((Equipement) equiplist. this. this.

} public String getMessage() { return message.get(l.findAll(). } public Hashtable getPerslist() { person_list.current_equipement = current_equipement.index = index. return interv_list.developpez.clear(). } public void setCurrent_equipement(String current_equipement) { this. } public void setNouveau(boolean nouveau) { this. changeretat(). La copie.getPersPrenom()). } public String getCurrent_equipement() { return current_equipement. } public boolean isNouveau() { return nouveau.57 Ce document est issu de http://www. message = mess_del_true.intervService. } return perslist. } public List getInterv_list() { interv_list = this. pers). } public void setCurrent_personnel(String current_personnel) { . hibernate et Richfaces par DGHAIES Jihed (Accueil) InterventionsBean public void supprimer() { try { this.message = message.isEmpty()) { interv = (Interventions) interv_list.clear().getPersNom() + "-" + pers.put(pers.get(index).dataTable = dataTable.Développement des applications Web avec Spring.com/javaee/spring/ . } } catch (Exception hx) { hx.printStackTrace(). } public void setMessage(String message) { this.developpez. message = mess_op_false.hasNext(). if (index > 0) { index--. } else { viderchamps(). List l = this. person_list. } public void setIndex(Integer index) { this. } } public Integer getIndex() { return index. chargercombo(). } interv_list = (List) getEquip_list(). modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com et reste la propriété exclusive de son auteur. http://dghaies-jihed. perslist. for (Iterator it = l. style_message = "valid_message". perslist. it.delete(interv). if (!interv_list. } public void setDataTable(UIDataTable dataTable) { this.nouveau = nouveau.getPersNom() + "-" + pers. } public UIDataTable getDataTable() { return dataTable.indexOf(it.add(pers.intervService.getPersPrenom(). } public String getCurrent_personnel() { return current_personnel.) { Personnel pers = (Personnel) l.next())).persService.iterator().findAll().

} . } public void setEquipService(InterfaceService equipService) { this. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.interv = interv. } public InterfaceService getIntervService() { return intervService. it.developpez. } return equiplist. } public void setPerslist(Hashtable perslist) { this. List l = this. } public List getPerson_list() { return person_list. } public Interventions getInterv() { return interv.findAll(). equiplist.developpez.next())).put(equip.iterator().) { Equipement equip = (Equipement) l. } public InterfaceService getEquipService() { return equipService. equip_list.perslist = perslist. La copie.current_personnel = current_personnel. for (Iterator it = l.equipService.intervService = intervService.equiplist = equiplist.get(l.com/javaee/spring/ .indexOf(it. } public void setEquiplist(Hashtable equiplist) { this.clear().equipService = equipService.getEqLib()).com et reste la propriété exclusive de son auteur.interv_list = interv_list. } public Hashtable getEquiplist() { equip_list. } public void setInterv_list(List interv_list) { this.hasNext().person_list = person_list.equip_list = equip_list. } public void setPersService(InterfaceService persService) { this. } public List getEquip_list() { return equip_list. } public void setEquip_list(List equip_list) { this. equip).getEqLib(). hibernate et Richfaces par DGHAIES Jihed (Accueil) InterventionsBean } this. http://dghaies-jihed. equiplist.clear().58 Ce document est issu de http://www.add(equip. } public void setIntervService(InterfaceService intervService) { this.Développement des applications Web avec Spring. } public InterfaceService getPersService() { return persService.persService = persService. } public void setPerson_list(List person_list) { this. } public void setInterv(Interventions interv) { this.

2010.dtd"> <f:view> <html> <head> <meta http-equiv="Content-Type" content="text/html.interv_list}" var="interv"> <rich:column> <f:facet name="header"> <h:outputText value="Equipement" /> </f:facet> <h:outputText value="#{interv. hibernate et Richfaces par DGHAIES Jihed (Accueil) 7.SKIN.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.tableBackgroundColor}'" onRowClick="this.com/javaee/spring/ .sun.backgroundColor='#{org.message}" styleClass="#{IntervBean.developpez.jsp"/> <h:inputHidden value="#{IntervBean.personnel.css"/> <title>Intervention</title> </head> <body> <h:form id="formintervention"> <a4j:include viewId="Entete.style.backgroundColor='#B5CEFD'" binding="#{IntervBean.persPrenom}" /> .style_message}"/> <rich:panel id="tablepanel" header="Liste Interventions" > <rich:dataTable onRowMouseOver="this.59 Ce document est issu de http://www.style.01 Transitional//EN" "http://www. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.sun.dataTable}" onRowMouseOut="this.8 .com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.persNom} #{interv. 23:50:10 Author : jihed --%> <%@taglib uri="http://richfaces. La copie.init}"/> <rich:spacer height="50px" /> <center> <rich:tabPanel style="width:500px."> <rich:tab label="Intervention"> <h:panelGrid width="450px" columns="1"> <h:outputText id="infomsg" value="#{IntervBean.equipement.Développement des applications Web avec Spring.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java. http://dghaies-jihed.developpez.com et reste la propriété exclusive de son auteur.eqLib}" /> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Intervenant" /> </f:facet> <h:outputText value="#{interv.w3. charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="commun_styles.personnel.jsp"/> <a4j:include viewId="menu.style.richfaces.backgroundColor='#F1F1F1'" rows="8" width="100%" id="tbl" value="#{IntervBean.org/TR/html4/loose.Liaison avec la page Interventions Page Interventions <%-Document : Intervention Created on : 25 janv.

invetat}"action="#{IntervBean.supprimer}" reRender="infomsg <a4j:commandButton id="validinterv" value="Valider" style="width:85px" disabled="#{IntervBean.annuler}" reRender="infomsg.developpez.t </h:panelGrid> </rich:tab> </rich:tabPanel> </center> </h:form> </body> </html> .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.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.ta <a4j:commandButton id="annulinterv" value="Annuler" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.viderchamps}" reRender="in <a4j:commandButton id="modifinterv" value="Modifier" style="width:85px"ajaxSingle="true" disabled="#{IntervBean. La copie.Développement des applications Web avec Spring.etat}" value="#{IntervBean. hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Interventions </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="Date" /> </f:facet> <h:outputText value="#{interv.modifier}" reRender="infom <a4j:commandButton id="suppinterv" value="Supprimer" style="width:85px"ajaxSingle="true" disabled="#{IntervBean.etat}" value="#{IntervBean.crud_ <h:graphicImage style="border:0" url="/images/ajax/delete16.person_l </rich:comboBox> <h:outputText value="Date intervention : " /> <rich:calendar id="foFiscal" value="#{IntervBean.intervDate}" popup="true" datePattern="dd/MM/yyyy" cellWidth="24px" cellHeight="22px" disabled="#{IntervBean.current_personnel}" suggestionValues="#{IntervBean.etat}"action="#{IntervBean.modifierligne}" reRender="infomsg.com/javaee/spring/ .tablepanel. http://dghaies-jihed.equip_l </rich:comboBox> <h:outputText value="Intervenant : " /> <rich:comboBox id="persinterv" defaultLabel="Entrez une valeur" disabled="#{IntervBean.invetat}"action="#{IntervBean.tablepanel.create}" reRender="infomsg.panelinfo.60 Ce document est issu de http://www.com et reste la propriété exclusive de son auteur.etat}"action="#{IntervBean.supprimer}" ajaxSingle="true" reRender="infomsg.etat}"action="#{IntervBean.developpez.panelinfo.png" /> </a4j:commandLink> </rich:column> <f:facet name="footer"> <rich:datascroller /> </f:facet> </rich:dataTable> </rich:panel> <rich:panel id="panelinfo" header="Informations générales"> <h:panelGrid columns="2" width="350" > <h:outputText value="Equipement : " /> <rich:comboBox id="eqpinterv" defaultLabel="Entrez une valeur" required="true" disabled="#{IntervBean.current_equipement}" suggestionValues="#{IntervBean.crud_panel"> <h:graphicImage style="border:0"url="/images/ajax/edit16. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.interv.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.

sun.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.Fichier de confiuration « Faces-config » Fichier faces config <?xml version='1.=========== FULL CONFIGURATION FILE ================================== --> <faces-config version="1.2" xmlns="http://java.springframework.com/xml/ns/javaee http://java.com/xml/ns/javaee" xmlns:xsi="http://www. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.developpez. La copie.sun.Développement des applications Web avec Spring.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> . hibernate et Richfaces par DGHAIES Jihed (Accueil) Page Interventions </f:view> 7.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.sun.el.0' encoding='UTF-8'?> <!-.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.SpringBeanFacesELResolver</el-resolver> </application> <managed-bean> <managed-bean-name>ServiceBean</managed-bean-name> <managed-bean-class>Beans.9 .jsf.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.developpez.w3. http://dghaies-jihed.61 Ce document est issu de http://www.com/xml/ns/javaee/webfacesconfig_1_2.com/javaee/spring/ .com et reste la propriété exclusive de son auteur.xsd"> <application> <el-resolver>org.web.

jsp .62 Ce document est issu de http://www.Changement de la page d'aceuil On va changer la page d'acceuil et on mettra authentification.Gestion de l'accés à l'aplication 8.xml puis on clique qur l'onglet pages On clique sur browse puis on choisit Authentification.10 . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. http://dghaies-jihed. On ouvre le fichier web.jsp comme page d'acceuil.com et reste la propriété exclusive de son auteur. La copie.developpez. hibernate et Richfaces par DGHAIES Jihed (Accueil) 7.Diagramme de l'aplication 8 .com/javaee/spring/ .developpez.1 .Développement des applications Web avec Spring.

La copie.persLogin ='" + login + "' and pers.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.get(0).AuthenticationDAO.find(" from Personnel pers where pers. . http://dghaies-jihed. import Entity.hibernate3.support.Développement des applications Web avec Spring. } AuthenticationDAO package Interfaces. } catch (Exception re) { re. import Interfaces.Personnel. return pers.orm. import Entity. /** * @author Jihed */ public interface AuthenticationDAO { public Personnel findByLoginAndPassword(String login.com et reste la propriété exclusive de son auteur.com/javaee/spring/ . String pass). String pass). AuthenticationService package Interfaces.2 .Personnel.service. On commence par la création des deux interfaces DAO et Service pour ce bean.persPassword ='" + pass + "'").AuthenticationDAO.printStackTrace().springframework.dao. import Interfaces.63 Ce document est issu de http://www. } } } AuthenticationServiceImpl package Implementation. /** * @author Jihed */ public class AuthenticationDaoImpl extends HibernateDaoSupport implements AuthenticationDAO { public Personnel findByLoginAndPassword(String login. String pass) { try { Personnel pers = (Personnel) getHibernateTemplate(). import Entity. public interface AuthenticationService { public Personnel findByLoginAndPassword(String login. import Interfaces.developpez. } Puis on passe à l'implémentation AuthenticationDaoImpl package Implementation. import org.Personnel.AuthenticationService.HibernateDaoSupport. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.developpez. /** * @author Jihed */ import Entity. return null. hibernate et Richfaces par DGHAIES Jihed (Accueil) 8.Personnel.

. hibernate et Richfaces par DGHAIES Jihed (Accueil) AuthenticationServiceImpl public class AuthenticationServiceImpl implements AuthenticationService { private AuthenticationDAO loginDao.format(maDateAvecFormat). public AuthenticationBean() { } public String getLogin() { return login.64 Ce document est issu de http://www. } public void setLoginDao(AuthenticationDAO loginDao) { this.Personnel.faces.FacesContext. } public void setToday(String td) { this.AuthenticationDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="loginService" class="Implementation.ExternalContext. private String password. private String message. SimpleDateFormat dateStandard = new SimpleDateFormat("EEEE dd MMMM yyyy"). } public String getToday() throws Exception { Date maDateAvecFormat = new Date(). private String today.text. pass).today = td.Date.findByLoginAndPassword(login.com/javaee/spring/ . } public AuthenticationDAO getLoginDao() { return loginDao. import javax.Développement des applications Web avec Spring. private Personnel pers.SimpleDateFormat.faces. import Interfaces. } public void setPassword(String password) { this. La copie.loginDao = loginDao.developpez. import java.context.service. /** * @author Hsan */ public class AuthenticationBean extends messageBean { private AuthenticationService loginService.developpez.util. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. dateStandard = null. http://dghaies-jihed.dao. public Personnel findByLoginAndPassword(String login.com et reste la propriété exclusive de son auteur. return today. String pass) { return loginDao. import javax. import Entity.AuthenticationService. today = "" + dateStandard. } public String getPassword() { return password. private String login. import java.context.AuthenticationServiceImpl"> <property name="loginDao" ref="loginDao"/> </bean> Création d'un nouveau bean qu'on l'appelle « AuthenticationBean » AuthenticationBean package Beans. } public void setLogin(String login) { this.login = login. } } Déclaration dans le fichier de configuration de Spring Configuration de Spring <bean id="loginDao" class="Implementation.password = password.

clear(). ExtContext.equals("user")) { droit = "user".getCurrentInstance(). style_message = "err_message". return "invalide". this. } else { message = "Echec de connexion. this.equals("admin")) { droit = "admin".pers = pers.out.getSessionMap().printStackTrace(). La copie. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. } .password = "".com et reste la propriété exclusive de son auteur. } public AuthenticationService getLoginService() { return loginService. } public void setPers(Personnel pers) { this. http://dghaies-jihed. } } public String deconnecter() { try { ExternalContext ExtContext = FacesContext. if (pers != null) { if (pers.printStackTrace(). message = "Echec de connexion. } public void setLoginService(AuthenticationService loginService) { this. } else if (pers. } } catch (Exception fe) { fe. } public String getMessage() { return message. } public void setMessage(String message) { this.getPersDroit().developpez.loginService = loginService.login = "". } catch (Exception ex) { ex.developpez. try { pers = loginService.password = "".Développement des applications Web avec Spring. } System. this.println("********DROIT*****" + droit).findByLoginAndPassword(login. password). } public Personnel getPers() { return pers. } return "ok".getExternalContext(). style_message = "err_message". hibernate et Richfaces par DGHAIES Jihed (Accueil) AuthenticationBean } } public String connecter() { String droit = null. message = "". return "invalide". this. return droit.getPersDroit().65 Ce document est issu de http://www.com/javaee/spring/ .message = message.login = "". verifiez votre login et mot de passe !". verifiez votre login et mot de passe !".

4 .org/TR/html4/loose.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.01 Transitional//EN" "http://www.sun." header="Authentification" styleClass="panel_3"> <h:panelGrid columns="3"> <h:outputText value="Login:" /> <h:inputText id="log" value="#{LoginBean.developpez.Ajout des « navigation rules » Les « navigation rules » permettent de définir les redirections entre les pages web dans notre application .background-position:-35px -15px.developpez.requestContextPath}/images/aj background-repeat:no-repeat. http://dghaies-jihed. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.sun. charset=UTF-8"> <title>Authentification</title> </head> <body > <rich:spacer height="200px"></rich:spacer> <center > <rich:panel id="logpan" style="background-image:url(#{facesContext.66 Ce document est issu de http://www.w3.Liaison avec la page Authentification Page web <%-Document : Authentification Created on : 25 janv.connecter}" reRender="logpan"/> </rich:panel> </center> </body> </html> </h:form> </f:view> 8.externalContext.com/jsf/core"%> <%@taglib prefix="h" uri="http://java. hibernate et Richfaces par DGHAIES Jihed (Accueil) 8. 2010.com et reste la propriété exclusive de son auteur.width:400px. dans notre exemple si le bean « authentification » va retourner la valeur « invalid » on va rester sur la même page « Authentification ». La copie.3 . 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 ». .com/javaee/spring/ .dtd"> <f:view> <h:form> <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. Ajout des navigation rules .org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.Développement des applications Web avec Spring.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. 21:30:57 Author : jihed --%> <%@taglib uri="http://richfaces.

hibernate et Richfaces par DGHAIES Jihed (Accueil) 8.developpez.67 Ce document est issu de http://www.today}" styleClass="titre_gris"/> <rich:spacer width="225px"/> <h:outputText id="user" value="#{LoginBean.service.com/javaee/spring/ .dtd"> <h:panelGrid columns="12" > <rich:spacer width="50px"/> <h:outputText id="dtjr" value="#{LoginBean. 21:47:07 Author : jihed --%> <%@taglib uri="http://richfaces. Page entête <%-Document : Entete Created on : 25 janv.org/TR/html4/loose.requestContextPath} <rich:toolTip showDelay="500"> Acceuil </rich:toolTip> </a4j:commandButton> <rich:spacer width="2px"/> . 2010.com et reste la propriété exclusive de son auteur.org/rich" prefix="rich"%> <%@taglib prefix="f" uri="http://java.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.w3.developpez.href='#{facesContext.pers.location.org/a4j" prefix="a4j"%> <%@taglib uri="http://richfaces.5 .sun.01 Transitional//EN" "http://www.persPrenom}" styleClass="titre_bleu"/ <rich:spacer width="6px"/> <h:outputText value=" | " styleClass="titre2"/> <rich:spacer width="6px"/> <h:outputText id="service" value="#{LoginBean. La copie. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.Développement des applications Web avec Spring.pers.persNom} #{LoginBean.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.pers.externalContext.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.com/jsf/html"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. http://dghaies-jihed.sun.gif" onclick="document.

gif" onclick="document.developpez.Développement des applications Web avec Spring.externalContext.Deploiement de l'application 9. Ça permet de compresser toute l'application web et ses dépendences dans un seul fichier.requestContextPath} <rich:toolTip showDelay="500"> Déconnexion </rich:toolTip> </a4j:commandButton> </h:panelGrid> </h:form> </h:panelGrid> 9 .href='#{facesContext.location. En effet.1 .deconnecter}" id="dec_btn" image="/images/ajax/lock. Puis il suffit de faire un build pour l'application pour obtenir un fichier war. http://dghaies-jihed.developpez.68 Ce document est issu de http://www. La copie. . hibernate et Richfaces par DGHAIES Jihed (Accueil) Page entête <a4j:commandButton action="#{LoginBean.com et reste la propriété exclusive de son auteur.Création du fichier war Les WAR (Web Application Archive) sont en réalité des JAR mais avec une extension différente. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com/javaee/spring/ . 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.

2 . http://dghaies-jihed.Déployer l'application Le déploiement d'une application web sur un serveur d'applications signifie en quelque sorte son installation. Dans l'onglet « services » de netbeans on trouve la liste des serveurs. La copie. hibernate et Richfaces par DGHAIES Jihed (Accueil) Le fichier WAR génére se trouve sous le répertoire dist du projet : 9.com/javaee/spring/ .developpez. on choisit le serveur tomcat puis on clique sur propriétes.com et reste la propriété exclusive de son auteur.developpez. . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.69 Ce document est issu de http://www. On va commencer par voir les parametres de notre serveur tomcat.Développement des applications Web avec Spring.

La copie. hibernate et Richfaces par DGHAIES Jihed (Accueil) On démarre le serveur tomcat On ouvre le navigateur web et on tape l'url de serveur. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.developpez.Développement des applications Web avec Spring.70 Ce document est issu de http://www. .com/javaee/spring/ .com et reste la propriété exclusive de son auteur. http://dghaies-jihed.developpez.

sur la page d'index de Tomcat. Sélectionnez votre WAR à l'aide du bouton browse et cliquez sur le bouton "Deploy". http://dghaies-jihed. Allez au bas de la page dans la section "WAR file to deploy". La copie.developpez. modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.com et reste la propriété exclusive de son auteur. La page « tomcat manager » contient la liste des applications présentes sur le serveur. Cliquez dessus. L'url par défaut est « http://localhost:8080 » mais on peut changer le numéro de port . hibernate et Richfaces par DGHAIES Jihed (Accueil) nous allons faire le deploiement sur le serveur tomcat qui est installé localement .com/javaee/spring/ .developpez.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).71 Ce document est issu de http://www. . Il devrait y avoir un lien à gauche Tomcat Manager.Développement des applications Web avec Spring.

developpez.developpez.Développement des applications Web avec Spring. . modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur. hibernate et Richfaces par DGHAIES Jihed (Accueil) L'application est maintenant déployée. Donc dans notre exemple.com et reste la propriété exclusive de son auteur. l'url de l'application sera le nom de l'archive (WAR) sans l'extension.com/javaee/spring/ . l'application déployée sera accessible via l'url : http://localhost:8084/TP-JSF/. http://dghaies-jihed. La copie.72 Ce document est issu de http://www.

Sign up to vote on this title
UsefulNot useful

Master Your Semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master Your Semester with a Special Offer from Scribd & The New York Times

Cancel anytime.