Vous êtes sur la page 1sur 40
framework framework MVC MVC pour pour applications applications Web Web Servlets Servlets – – JSP
framework framework MVC MVC pour pour applications applications Web Web Servlets Servlets – – JSP

framework framework MVC MVC

pour pour applications applications Web Web

Servlets Servlets JSP JSP

pour applications applications Web Web Servlets Servlets – – JSP JSP © Philippe GENOUD UJF Février
pour applications applications Web Web Servlets Servlets – – JSP JSP © Philippe GENOUD UJF Février

© Philippe GENOUD

UJF

Février 2010

1

RappelRappel ArchitectureArchitecture MVCMVC

Rappel Rappel Architecture Architecture MVC MVC Serveur Internet (Serveur HTTP + Serveur Servlet/JSP) S e r

Serveur Internet (Serveur HTTP + Serveur Servlet/JSP)

Serveur SGBD

1111 Construit Modifie 2222 Driver Transfert Modèle Modèle (Java (Java Bean) Bean) JDBC Vue Vue
1111 Construit
Modifie
2222
Driver
Transfert
Modèle Modèle
(Java (Java Bean) Bean)
JDBC
Vue Vue
3333 Consulte
(JSP) (JSP)

Requête HTTP

JDBC Vue Vue 3333 Consulte (JSP) (JSP) Requête HTTP Réponse HTTP Bonne séparation des différents composants
JDBC Vue Vue 3333 Consulte (JSP) (JSP) Requête HTTP Réponse HTTP Bonne séparation des différents composants

Réponse HTTP

Vue 3333 Consulte (JSP) (JSP) Requête HTTP Réponse HTTP Bonne séparation des différents composants d’une

Bonne séparation des différents composants d’une application Web Modularité – réutilisation – évolutivité Séparation des compétences

Modularité – réutilisation – évolutivité Séparation des compétences © Philippe GENOUD UJF Février 2010 2
Modularité – réutilisation – évolutivité Séparation des compétences © Philippe GENOUD UJF Février 2010 2
Modularité – réutilisation – évolutivité Séparation des compétences © Philippe GENOUD UJF Février 2010 2

© Philippe GENOUD

UJF

Février 2010

2

FrameworksFrameworks WebWeb

Frameworks Frameworks Web Web mais mettre en œuvre une "bonne" architecture MVC reste un tâche complexe

mais mettre en œuvre une "bonne" architecture MVC reste un tâche complexe surtout si plusieurs applications doivent profiter de cette architecture

nombreux frameworks pour faciliter le développement d'applications Web

Dans le monde Java :

C'est quoi un framework ?
C'est quoi un
framework ?

Struts (Apache) Java Server Faces (SUN) Spring MVC Tapestry (Apache) Stripes Wicket (Apache)

mais aussi dans de nombreux autres langages :

Symfony (PHP) Ruby On Rails (Ruby) Django (Python) Grails (Groovy)

(PHP) Ruby On Rails (Ruby) Django (Python) Grails (Groovy) … © Philippe GENOUD UJF Février 2010
(PHP) Ruby On Rails (Ruby) Django (Python) Grails (Groovy) … © Philippe GENOUD UJF Février 2010
(PHP) Ruby On Rails (Ruby) Django (Python) Grails (Groovy) … © Philippe GENOUD UJF Février 2010

© Philippe GENOUD

UJF

Février 2010

3

FrameworkFramework

Framework Framework Framework (cadre d'application) "ensemble de bibliothèques et de conventions permettant le

Framework (cadre d'application)

"ensemble de bibliothèques et de conventions permettant le développement rapide d'applications. Il fournit suffisamment de briques logicielles et impose suffisamment de rigueur pour pouvoir produire une application aboutie et facile à maintenir. Ces composants sont organisés pour être utilisés en interaction les uns avec les autres" http://www.techno-science.net/

Différence framework / bibliothèque (librairie)

avec une librairie : exécution est dirigée par le code écrit par le développeur qui fait appel aux classes de la librairie

avec un framework : exécution est dirigée par le code du framework qui fait appel au code écrit par le développeur

le développeur doit compléter les classes et ressources préexistantes dans le framework

doit compléter les classes et ressources préexistantes dans le framework © Philippe GENOUD UJF Février 2010
doit compléter les classes et ressources préexistantes dans le framework © Philippe GENOUD UJF Février 2010
doit compléter les classes et ressources préexistantes dans le framework © Philippe GENOUD UJF Février 2010

© Philippe GENOUD

UJF

Février 2010

4

StrutsStruts c'estc'est quoiquoi ??

Struts Struts c'est c'est quoi quoi ? ? Serveur Internet (Serveur HTTP + Serveur Servlet/JSP) S

Serveur Internet (Serveur HTTP + Serveur Servlet/JSP)

Serveur SGBD

1111 Construit Controleur Controleur Modifie (Servlet) (Servlet) 2222 Driver Transfert Modèle Modèle (Java (Java
1111 Construit
Controleur Controleur
Modifie
(Servlet) (Servlet)
2222
Driver
Transfert
Modèle Modèle
(Java (Java Bean) Bean)
JDBC
Vue Vue
3333 Consulte
(JSP) (JSP)

Requête HTTP

JDBC Vue Vue 3333 Consulte (JSP) (JSP) Requête HTTP Réponse HTTP Struts : Framework open source
JDBC Vue Vue 3333 Consulte (JSP) (JSP) Requête HTTP Réponse HTTP Struts : Framework open source

Réponse HTTP

Vue 3333 Consulte (JSP) (JSP) Requête HTTP Réponse HTTP Struts : Framework open source (fondation apache)

Struts : Framework open source (fondation apache) pour le développement d'applications Web Java respectant le modèle MVC Architecture générique pour la partie contrôleur Facilités pour la réalisation des vues

pour la partie contrôleur Facilités pour la réalisation des vues © Philippe GENOUD UJF Février 2010
pour la partie contrôleur Facilités pour la réalisation des vues © Philippe GENOUD UJF Février 2010
pour la partie contrôleur Facilités pour la réalisation des vues © Philippe GENOUD UJF Février 2010

© Philippe GENOUD

UJF

Février 2010

5

Struts Struts c'est c'est quoi quoi ? ?
Struts Struts c'est c'est quoi quoi ? ?
Struts Struts c'est c'est quoi quoi ? ?
Struts Struts c'est c'est quoi quoi ? ?

StrutsStruts c'estc'est quoiquoi ??

Struts Struts c'est c'est quoi quoi ? ?
Struts Struts c'est c'est quoi quoi ? ?
Le framework Struts encourage les architectures basées sur l'approche Model 2 (une variante du modèle
Le framework Struts encourage les architectures basées sur l'approche Model 2 (une variante du modèle

Le framework Struts encourage les architectures basées sur l'approche Model 2 (une variante du modèle classique MVC appliquée aux applications web).

architectures basées sur l'approche Model 2 (une variante du modèle classique MVC appliquée aux applications web).
Le cœur du framework Struts est une couche contrôleur basée sur les technologies les plus
Le cœur du framework Struts est une couche contrôleur basée sur les technologies les plus
Le cœur du framework Struts est une couche contrôleur basée sur les technologies les plus
Le cœur du framework Struts est une couche contrôleur basée sur les technologies les plus

Le cœur du framework Struts est une couche contrôleur basée sur les technologies les plus acceptées Servlet/JSP, JavaBeans, ResourceBundles, XML. Struts fournit son propre composant contrôleur

les plus acceptées Servlet/JSP, JavaBeans, ResourceBundles, XML. Struts fournit son propre composant contrôleur
Struts intègre d'autres technologies pour offrir le Modèle et la Vue. Pour le Modèle, Struts
Struts intègre d'autres technologies pour offrir le Modèle et la Vue. Pour le Modèle, Struts
Struts intègre d'autres technologies pour offrir le Modèle et la Vue. Pour le Modèle, Struts
Struts intègre d'autres technologies pour offrir le Modèle et la Vue. Pour le Modèle, Struts

Struts intègre d'autres technologies pour offrir le Modèle et la Vue. Pour le Modèle, Struts peut interagir avec toutes les techniques d'accès aux données comme JDBC, EJB (Entreprise JavaBeans), Hibernate… Pour la Vue, Struts n'est pas limité aux JSP, il peut fonctionner aussi avec les Velocity Templates, le XSLT et d'autres systèmes de présentation.

aux JSP, il peut fonctionner aussi avec les Velocity Templates, le XSLT et d'autres systèmes de
avec les Velocity Templates, le XSLT et d'autres systèmes de présentation. © Philippe GENOUD UJF Février
avec les Velocity Templates, le XSLT et d'autres systèmes de présentation. © Philippe GENOUD UJF Février
avec les Velocity Templates, le XSLT et d'autres systèmes de présentation. © Philippe GENOUD UJF Février

© Philippe GENOUD

UJF

Février 2010

6

Exemple d'application Struts © Philippe GENOUD UJF Février 2010 7

Exemple d'application Struts

Exemple d'application Struts © Philippe GENOUD UJF Février 2010 7
Exemple d'application Struts © Philippe GENOUD UJF Février 2010 7
Exemple d'application Struts © Philippe GENOUD UJF Février 2010 7
Exemple d'application Struts © Philippe GENOUD UJF Février 2010 7

© Philippe GENOUD

UJF

Février 2010

7

DocumentationDocumentation

Documentation Documentation site de Struts http://struts.apache.org/ Struts 2.x réécriture du framework struts

site de Struts http://struts.apache.org/ Struts 2.x réécriture du framework struts

Struts 1.x dernière version : 1.3.10

version intégrée à NetBeans (6.7): 1.3.8 http://struts.apache.org/1.3.8

au 2/02/1020

http://struts.apache.org/1.3.8/apidocs/index.html

au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8
au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8
au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8
au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8

guide

utilisateur

au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8
au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8
au 2/02/1020 http://struts.apache.org/1.3.8/apidocs/index.html guide utilisateur © Philippe GENOUD UJF Février 2010 8

© Philippe GENOUD

UJF

Février 2010

8

ArchitectureArchitecture ggénéraleénérale dede StrutsStruts

Architecture g générale énérale de de Struts Struts Fichier xml mapping vers les actions et les
Fichier xml mapping vers les actions et les vues Regroupent les paramètres de la requête,
Fichier xml
mapping vers les
actions et les vues
Regroupent les
paramètres de la
requête, qu'ils
peuvent valider
traitement la requête
ActionForm1ActionForm1ActionForm1ActionForm1
consulteconsulteconsulteconsulte
ActionForm1ActionForm1ActionForm1ActionForm1 ActionForm2ActionForm2ActionForm2ActionForm2
ActionForm2ActionForm2ActionForm2ActionForm2
Font le lien
entre le
contrôleur et la
logique métier
Serveur
La requête est transmise
au contrôleur
SGBD
1111
2222
Controleur générique
(étend javax.servlet.
http.HttpServlet)
Action1Action1Action1Action1 Action1Action1Action1Action1
Action2Action2Action2Action2 Action2Action2Action2Action2
« package» et aiguille
le trafic HTTP vers le
gestionnaire approprié
4444
Contrôleur
Modèle Modèle
(Java (Java Bean) Bean)
3333
Choix et paramétrage de la vue selon
la réponse de l'action et l’état du
contrôleur
Vue Vue
Création
(JSP) (JSP)
modification des
objets modèle
contrôleur Vue Vue Création (JSP) (JSP) modification des objets modèle © Philippe GENOUD UJF Février 2010
contrôleur Vue Vue Création (JSP) (JSP) modification des objets modèle © Philippe GENOUD UJF Février 2010
contrôleur Vue Vue Création (JSP) (JSP) modification des objets modèle © Philippe GENOUD UJF Février 2010
contrôleur Vue Vue Création (JSP) (JSP) modification des objets modèle © Philippe GENOUD UJF Février 2010

© Philippe GENOUD

UJF

Février 2010

9

ArchitectureArchitecture ggénéraleénérale dede StrutsStruts

Architecture g générale énérale de de Struts Struts Génération de la page HTML 5555 page page
Génération de la page HTML 5555 page page .jsp .jsp 6666 consulteconsulteconsulteconsulte Envoi au client
Génération de la
page HTML
5555
page page .jsp .jsp
6666
consulteconsulteconsulteconsulte
Envoi au client de la
présentation issue de la
vue
JSTL JSTL
Struts propose des
bibliothèques de Tags
pour faciliter la
construction des
pages JSP
properties.fr properties.fr
Ressources
…biblio …biblio perso perso
Bibliothèques de tags
Vue
Fichiers de ressources
pour messages
utilisés dans les vues
de ressources pour messages utilisés dans les vues Modèle Modèle (Java (Java Bean) Bean) © Philippe
Modèle Modèle (Java (Java Bean) Bean)
Modèle Modèle
(Java (Java Bean) Bean)
pour messages utilisés dans les vues Modèle Modèle (Java (Java Bean) Bean) © Philippe GENOUD UJF
pour messages utilisés dans les vues Modèle Modèle (Java (Java Bean) Bean) © Philippe GENOUD UJF
pour messages utilisés dans les vues Modèle Modèle (Java (Java Bean) Bean) © Philippe GENOUD UJF

© Philippe GENOUD

UJF

Février 2010

10

Struts Struts par par l'exemple: l'exemple: l’application l’application histogramme histogramme de de notes
Struts Struts par par l'exemple: l'exemple: l’application l’application histogramme histogramme de de notes notes
serveur Web
Serveur SGBD
HistogrammeHistogrammeHistogrammeHistogramme desdesdesdes notesnotesnotesnotes
imageimageimageimage gifgifgifgif
PagePagePagePage HTMLHTMLHTMLHTML avecavecavecavec frfréfrfrééquenceséquencesquencesquences
desdesdesdes notesnotesnotesnotes dansdansdansdans unununun tableautableautableautableau
© Philippe GENOUD
UJF
Février 2010
11

CrCréationéation d'und'un projetprojet StrutsStruts

éation d'un d'un projet projet Struts Struts Netbeans offre un support pour Struts (version 1.2.9)
éation d'un d'un projet projet Struts Struts Netbeans offre un support pour Struts (version 1.2.9)

Netbeans offre un support pour Struts (version 1.2.9)

Fichiers de configuration struts Fichier de ressources pour les messages
Fichiers de
configuration
struts
Fichier
de
ressources
pour les
messages

Librairies struts

struts Fichier de ressources pour les messages Librairies struts © Philippe GENOUD UJF Février 2010 12
struts Fichier de ressources pour les messages Librairies struts © Philippe GENOUD UJF Février 2010 12
struts Fichier de ressources pour les messages Librairies struts © Philippe GENOUD UJF Février 2010 12
struts Fichier de ressources pour les messages Librairies struts © Philippe GENOUD UJF Février 2010 12

© Philippe GENOUD

UJF

Février 2010

12

ConfigurationConfiguration :: web.xmlweb.xml

Configuration Configuration : : web.xml web.xml Définition du contrôleur de l'application dans le fichier web.xml

Définition du contrôleur de l'application dans le fichier web.xml

Le contrôleur est une servlet générique ActionServlet ou sous classe d'ActionServlet.

ActionServlet ou sous classe d' ActionServlet . <web-app <web-app version="2.5"

<web-app <web-app version="2.5" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee"

>

>

<servlet> <servlet> <servlet-name>action</servlet-name> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> </init-param> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param>

</servlet> </servlet>

<servlet-mapping> <servlet-mapping> <url-pattern>*.do</url-pattern> <servlet-name>action</servlet-name> <servlet-name>action</servlet-name> </servlet-mapping> <url-pattern>*.do</url-pattern> </servlet-mapping>

</web-app> </web-app>

</web-app> </web-app> La localisation du fichier de configuration
</web-app> </web-app> La localisation du fichier de configuration

La localisation du fichier de configuration struts-config.xml

Toutes les URL se terminant par le suffixe ".do" sont orientées vers ce contrôleur

Possibilité de définir plusieurs contrôleurs dans une application strutsse terminant par le suffixe ".do" sont orientées vers ce contrôleur © Philippe GENOUD UJF Février

Possibilité de définir plusieurs contrôleurs dans une application struts © Philippe GENOUD UJF Février 2010 13
Possibilité de définir plusieurs contrôleurs dans une application struts © Philippe GENOUD UJF Février 2010 13
Possibilité de définir plusieurs contrôleurs dans une application struts © Philippe GENOUD UJF Février 2010 13

© Philippe GENOUD

UJF

Février 2010

13

ConfigurationConfiguration :: struts-config.xmlstruts-config.xml

Configuration : : struts-config.xml struts-config.xml Une action est un traitement obtenu suite au passage

Une action est un traitement obtenu suite au passage d'une requête au contrôleur Struts

Les actions sont décrites dans le fichier struts-configs dans la section <action-mappings>…</action-mappings> Au moyen de la balise <action>

différents attributs de la balise <action> sont à renseigner selon que

la requête et avec ou sans paramètres

name : nom d'un objet ActionForm pour la récupération/validation des paramètres, défini dans la section <form-beans>…</form-beans> du fichier struts-config.xml

la requête nécessite un traitement ou une simple redirection

path : le path (relatif au contexte de l'application) auquel est associée l'action type : la classe de l'objet Action qui effectue le traitement associé à la requête forward : url de redirection

effectue le traitement associé à la requête forward : url de redirection © Philippe GENOUD UJF
effectue le traitement associé à la requête forward : url de redirection © Philippe GENOUD UJF
effectue le traitement associé à la requête forward : url de redirection © Philippe GENOUD UJF

© Philippe GENOUD

UJF

Février 2010

14

SimpleSimple redirectionredirection Action correspondant à une requête sans paramètres nécessitant une simple
SimpleSimple redirectionredirection
Action correspondant à une requête sans paramètres nécessitant une
simple redirection
accueil.html
formulaireAnneeMatiere.jsp
formulaireAnneeMatiere.do
.jsp
struts-config.xml
<struts-config> <struts-config>
définit le
nom de l’URL
<action-mappings> <action-mappings>
correspondant à l'action
(suffixe « .do » implicite)
<action path="/formulaireAnneeMatiere"
forward="/formulaireAnneeMatiere.jsp"/>
</action-mappings> </action-mappings>
l’URL à laquelle est relayée
la demande
</struts-config> </struts-config>
© Philippe GENOUD
UJF
Février 2010
15

SimpleSimple RedirectionRedirection

Simple Simple Redirection Redirection assistant NetBeans pour ajout d'une action pour une requête sans paramètres

assistant NetBeans pour ajout d'une action pour une requête sans paramètres nécessitant une simple redirection

2 1 Clic bouton droit 3
2
1
Clic bouton droit
3
sans paramètres nécessitant une simple redirection 2 1 Clic bouton droit 3 © Philippe GENOUD UJF
sans paramètres nécessitant une simple redirection 2 1 Clic bouton droit 3 © Philippe GENOUD UJF
sans paramètres nécessitant une simple redirection 2 1 Clic bouton droit 3 © Philippe GENOUD UJF

© Philippe GENOUD

UJF

Février 2010

16

ActionAction avecavec traitementtraitement

Action Action avec avec traitement traitement tableau.jsp Action correspondant à une requête avec paramètres
Action Action avec avec traitement traitement tableau.jsp Action correspondant à une requête avec paramètres

tableau.jsp

Action Action avec avec traitement traitement tableau.jsp Action correspondant à une requête avec paramètres

Action correspondant à une requête avec paramètres nécessitant un traitement

à une requête avec paramètres nécessitant un traitement formulaireAnneeMatiere.jsp notesAnneeMatiere.do

formulaireAnneeMatiere.jsp

nécessitant un traitement formulaireAnneeMatiere.jsp notesAnneeMatiere.do HistogramImager (servlet) © Philippe
notesAnneeMatiere.do
notesAnneeMatiere.do

HistogramImager (servlet)

formulaireAnneeMatiere.jsp notesAnneeMatiere.do HistogramImager (servlet) © Philippe GENOUD UJF Février 2010 17
formulaireAnneeMatiere.jsp notesAnneeMatiere.do HistogramImager (servlet) © Philippe GENOUD UJF Février 2010 17
formulaireAnneeMatiere.jsp notesAnneeMatiere.do HistogramImager (servlet) © Philippe GENOUD UJF Février 2010 17

© Philippe GENOUD

UJF

Février 2010

17

ActionAction avecavec traitementtraitement

Action Action avec avec traitement traitement NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere
NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere
NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm
notesAnneeMatiere.do? annee=2005& matiere=BD&

notesAnneeMatiere.do?

annee=2005&

matiere=BD&

présentation=tableau

annee=2005& matiere=BD& présentation=tableau Instancie et initialise setAnnee(…), setMatiere(…) …

Instancie et initialise setAnnee(…), setMatiere(…) …

validate(…) .jsp ActionErrors Si erreur sinon execute(…) Consulte getAnnee(…), getMatiere(…)
validate(…)
.jsp
ActionErrors
Si erreur
sinon
execute(…)
Consulte
getAnnee(…), getMatiere(…)
HistogrammeHistogrammeHistogrammeHistogramme HistogrammeHistogrammeHistogrammeHistogramme
Initialise le modèle
tableau.jsp
ActionForward
.jsp
Selon
l'ActionForward
tableau.jsp ActionForward .jsp Selon l'ActionForward formulaireAnneeNote.jsp HistogramImager © Philippe GENOUD

formulaireAnneeNote.jsp

.jsp Selon l'ActionForward formulaireAnneeNote.jsp HistogramImager © Philippe GENOUD UJF Février 2010 18

HistogramImager

.jsp Selon l'ActionForward formulaireAnneeNote.jsp HistogramImager © Philippe GENOUD UJF Février 2010 18
.jsp Selon l'ActionForward formulaireAnneeNote.jsp HistogramImager © Philippe GENOUD UJF Février 2010 18
.jsp Selon l'ActionForward formulaireAnneeNote.jsp HistogramImager © Philippe GENOUD UJF Février 2010 18

© Philippe GENOUD

UJF

Février 2010

18

ActionFormActionForm

ActionForm ActionForm NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm

JavaBean qui permet de stocker les propriétés des formulaires

Hérite de org.apache.struts.action.ActionForm

vérifie la validité des propriétés par sa méthode validate

ActionErrors validate(ActionMapping, HttpServletRequest) ActionMapping : objet image de la configuration de l’action en cours stockée dans struts-config.xml HttpServletRequest : requête du client transmise par la Servlet de contrôle ActionErrors : permet de retourner des messages erreurs au client

La classe dispose également d’autres méthodes ActionServlet getServlet() : retourne la Servlet qui gère le contrôle reset(ActionMapping, HttpServletRequest) : initialise les propriétés

reset(ActionMapping, HttpServletRequest) : initialise les propriétés © Philippe GENOUD UJF Février 2010 19
reset(ActionMapping, HttpServletRequest) : initialise les propriétés © Philippe GENOUD UJF Février 2010 19
reset(ActionMapping, HttpServletRequest) : initialise les propriétés © Philippe GENOUD UJF Février 2010 19

© Philippe GENOUD

UJF

Février 2010

19

ActionFormActionForm

ActionForm ActionForm public public class class NotesAnneeMatiereForm NotesAnneeMatiereForm extends extends ActionForm
ActionForm ActionForm public public class class NotesAnneeMatiereForm NotesAnneeMatiereForm extends extends ActionForm
public public class class NotesAnneeMatiereForm NotesAnneeMatiereForm extends extends ActionForm ActionForm { {
public public class class NotesAnneeMatiereForm NotesAnneeMatiereForm extends extends ActionForm ActionForm { {
propriété
private private String String annee; annee;
private private private String String String presentation; matiere; presentation;
private String matiere;
public public void void setAnnee(String setAnnee(String annee) annee) { {
this.annee this.annee = = annee; annee;
}
}
modifieur et
accesseur pour
la propriété
public public return String String annee; getAnnee() getAnnee() { {
return annee;
}
}
public public this.matiere void void setMatiere(String setMatiere(String = matiere; matiere) matiere) { {
this.matiere = matiere;
}
}
} }
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm

Chaque paramètre du formulaire est défini comme une propriété de l'objet ActionForm associé qui doit être un JavaBean

une propriété de l'objet ActionForm associé qui doit être un JavaBean © Philippe GENOUD UJF Février
une propriété de l'objet ActionForm associé qui doit être un JavaBean © Philippe GENOUD UJF Février
une propriété de l'objet ActionForm associé qui doit être un JavaBean © Philippe GENOUD UJF Février

© Philippe GENOUD

UJF

Février 2010

20

ActionFormActionForm

public public class class NotesAnneeMatiereForm NotesAnneeMatiereForm extends extends ActionForm ActionForm { { private
public public class class NotesAnneeMatiereForm NotesAnneeMatiereForm extends extends ActionForm ActionForm { {
private private String String annee; annee;
private private private String String String presentation; matiere; presentation;
private String matiere;
NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm NotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereFormNotesAnneeMatiereForm
Redéfinition (overriding) de la méthode validate
@Override @Override
public public ActionErrors ActionErrors validate(ActionMapping validate(ActionMapping HttpServletRequest mapping, mapping, request) {
HttpServletRequest request) {
Création d'un objet erreur vide
ActionErrors ActionErrors errors errors = = new new ActionErrors(); ActionErrors();
if if (annee (annee == == null null || || annee.length() annee.length() < < 1) 1) { {
errors.add("Année", errors.add("Année", new new ActionMessage("error.annee.required")); ActionMessage("error.annee.required"));
}
}
else else try { { {
try numeroAnnee { = Integer.parseInt(annee);
Selon les paramètres ajout de
messages d'erreur
numeroAnnee = Integer.parseInt(annee);
} } catch catch (NumberFormatException (NumberFormatException e) e) { {
errors.add("Année", errors.add("Année", new new ActionMessage("error.annee.isNotANumber")); ActionMessage("error.annee.isNotANumber"));
}
}
}
}
if if ((!matiere.equals("graphic")) ((!matiere.equals("graphic")) errors.add("Année", new ActionMessage("error.annee.required")); && && ((!matiere.equals("tableau")) ((!matiere.equals("tableau")) { {
errors.add("Année", new ActionMessage("error.annee.required"));
Le message
}
est défini dans
}
un fichier .properties
Renvoie des erreurs (vide si la validation a réussi)
return return errors; errors;
}
}
} }
(vide si la validation a réussi) return return errors; errors; } } } } © Philippe
(vide si la validation a réussi) return return errors; errors; } } } } © Philippe
(vide si la validation a réussi) return return errors; errors; } } } } © Philippe

© Philippe GENOUD

UJF

Février 2010

21

ActionFormActionForm

ActionForm ActionForm les messages d'erreurs sont définis dans le fichier properties de l'application

les messages d'erreurs sont définis dans le fichier properties de l'application

errors.add("Année", new ActionMessage("error.annee.isNotANumber"));

new ActionMessage(" error.annee.isNotANumber ")); pl2/notes/ApplicationResource.properties

pl2/notes/ApplicationResource.properties

")); pl2/notes/ApplicationResource.properties errors.header=<UL> errors.header=<UL>
errors.header=<UL> errors.header=<UL> errors.prefix=<LI><span
errors.header=<UL> errors.header=<UL>
errors.prefix=<LI><span errors.suffix=</span></LI> errors.prefix=<LI><span style="color: style="color: red"> red">
errors.suffix=</span></LI>
error.annee.required=Indiquez error.annee.required=Indiquez l'année l'année
error.annee.isNotANumber=L'année error.annee.isNotANumber=L'année doit doit être être un un nombre nombre
doit doit être être un un nombre nombre Tag de bibliothèque html de Struts pour afficher
Tag de bibliothèque html de Struts pour afficher les messages d'erreur
Tag de bibliothèque html
de Struts pour afficher les
messages d'erreur

formulaireAnneeMatiere.jsp

les messages d'erreur formulaireAnneeMatiere.jsp <%@ <%@ taglib taglib
<%@ <%@ taglib taglib uri="http://struts.apache.org/tags-html"
<%@ <%@ taglib taglib uri="http://struts.apache.org/tags-html" uri="http://struts.apache.org/tags-html" prefix="html" prefix="html" %> %>
<html> <html>
<body> <body>
<H1>Histogramme <HR> <H1>Histogramme des des notes</H1> notes</H1>
<HR>
<form <form action="notesAnneeMatiere.do" action="notesAnneeMatiere.do" method="post"> method="post">
</form> </form>
<HR> <HR>
<html:errors/> <html:errors/>
</html> </html> </body> </body>
</html> </html> </body> </body> © Philippe GENOUD UJF Février 2010 22
</html> </html> </body> </body> © Philippe GENOUD UJF Février 2010 22
</html> </html> </body> </body> © Philippe GENOUD UJF Février 2010 22

© Philippe GENOUD

UJF

Février 2010

22

ActionFormActionForm

ActionForm ActionForm l'utilisation du fichier properties facilite la localisation (i18n) de l'application

l'utilisation du fichier properties facilite la localisation (i18n) de l'application

pl2/notes/ApplicationResource.properties

un fichier ressource par langue errors.header=<UL> errors.header=<UL>
un fichier ressource par langue
errors.header=<UL> errors.header=<UL>
errors.prefix=<LI><span errors.prefix=<LI><span style="color: style="color: red"> red">
errors.suffix=</span></LI>
pl2/notes/ApplicationResource.properties.en
errors.suffix=</span></LI>
errors.header=<UL> errors.header=<UL>
error.annee.required=Indiquez error.annee.required=Indiquez l'année l'année
errors.prefix=<LI><span errors.prefix=<LI><span style="color: style="color: red"> red">
error.annee.isNotANumber=L'année doit être un nombre
errors.suffix=</span></LI>
error.annee.isNotANumber=L'année doit être
un nombre
errors.suffix=</span></LI>
formHisto.title=Histogramme formHisto.title=Histogramme de de notes notes
error.annee.required=Year error.annee.required=Year required required
error.annee.isNotANumber=Year error.annee.isNotANumber=Year is is not not a a number number
formulaireAnneeMatiere.jsp
formHisto.title=Marks formHisto.title=Marks Histogram Histogram
<%@ <%@ taglib taglib uri="http://struts.apache.org/tags-html" uri="http://struts.apache.org/tags-html" prefix="html" prefix="html" %> %>
<%@ taglib uri="http://struts.apache.org/" prefix="bean" %>
<html> <html> <body> <body> <H1>
<H1>
</H1> </H1>
<HR> <HR>
<form <form action="notesAnneeMatiere.do" action="notesAnneeMatiere.do" method="post"> method="post">
</form> </form>
<HR> <HR>
</body> <html:errors/> <html:errors/>
</body>
</html> </html>
© Philippe GENOUD
UJF
Février 2010
23
ActionFormActionForm Les ActionForms doivent être déclarées dans le fichier struts-config.xml balise
ActionFormActionForm
Les ActionForms doivent être déclarées dans le fichier struts-config.xml
balise <form-bean> dans la section <form-beans>…</form-beans>
<struts-config> <struts-config>
Nom pour identifier
l'action form
<form-beans> <form-beans>
<form-bean <form-bean
name="NotesAnneeMatiereForm" name="NotesAnneeMatiereForm"
type="pl2.notes.struts.forms.NotesAnneeMatiereForm"/> type="pl2.notes.struts.forms.NotesAnneeMatiereForm"/>
Nom de la classe Java
</form-beans> </form-beans>
<struts-config> <struts-config>
© Philippe GENOUD
UJF
Février 2010
24

ActionFormActionForm

ActionForm ActionForm assistant NetBeans pour créer une ActionForm 1 nom de la classe 2 3 ©

assistant NetBeans pour créer une ActionForm

1 nom de la classe 2 3 © Philippe GENOUD UJF Février 2010
1
nom de la classe
2
3
© Philippe GENOUD
UJF
Février 2010
assistant NetBeans pour créer une ActionForm 1 nom de la classe 2 3 © Philippe GENOUD
assistant NetBeans pour créer une ActionForm 1 nom de la classe 2 3 © Philippe GENOUD

25

ActionAction

Action Action Permet d'associer un traitement à une requête Hérite de org.apache.struts.action.Action

Permet d'associer un traitement à une requête

Hérite de org.apache.struts.action.Action

NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere
NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere

Effectue le traitement par sa méthode execute ActionForward execute(ActionMapping, ActionForm,HttpServletRequest, HttpServletResponse) ActionMapping : objet image de la configuration de l’action en cours stockée dans struts-config.xml ActionForm : JavaBean qui stocke l’information du formulaire HttpServletRequest : référence de la requête HttpServletResponse : référence de la réponse ActionForward :objet identifiant la destination que le contrôleur (l' ActionServlet) doit choisir

la destination que le contrôleur (l' ActionServlet ) doit choisir © Philippe GENOUD UJF Février 2010
la destination que le contrôleur (l' ActionServlet ) doit choisir © Philippe GENOUD UJF Février 2010
la destination que le contrôleur (l' ActionServlet ) doit choisir © Philippe GENOUD UJF Février 2010

© Philippe GENOUD

UJF

Février 2010

26

ActionAction public class NotesAnneeMatiere extends Action { private final static String HISTO_TABLE =
ActionAction
public class NotesAnneeMatiere extends Action {
private final static String HISTO_TABLE = "histotableau";
private final static String HISTO_GRAPHIC = "histographique";
NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
NotesAnneeMatiereActionForm f =
(NotesAnneeMatiereForm) form;
Récupération de l'objet
ActionForm grâce au
paramètre form
INotesDAO notesDAO = DAOFactory().getNoteDAO();
Histogramme histo = notesDAO.getHistogramme(f.getNumeroAnnee(),
f.getMatiere() );
Construction
du modèle
request.setAttribute("notes", histo);
Le modèle est transmis via la
requête
if (f.getPresentation().equals("graphic")) {
return mapping.findForward(HISTO_GRAPHIC);
} else {
return mapping.findForward(HISTO_TABLE);
}
Choix de la prochaine
redirection
}
}
© Philippe GENOUD
UJF
Février 2010
27

ActionAction

Action Action Declaration de l'Action dans le fichier struts-config.xml <struts-config>

Declaration de l'Action dans le fichier struts-config.xml

<struts-config> <struts-config> <form-beans> <form-beans> <form-bean <form-bean
<struts-config> <struts-config>
<form-beans> <form-beans>
<form-bean <form-bean name="NotesAnneeMatiereActionForm" name="NotesAnneeMatiereActionForm"
type="pl2.notes.struts.forms.NotesAnneeMatiereActionForm"/> type="pl2.notes.struts.forms.NotesAnneeMatiereActionForm"/>
</form-beans> </form-beans>
<action-mappings> <action-mappings>
<action <action forward="/formulaireAnneeMatiere.jsp" forward="/formulaireAnneeMatiere.jsp" path="/formulaireAnneeMatiere"/> path="/formulaireAnneeMatiere"/>
<action <action path="/notesAnneeMatiere" path="/notesAnneeMatiere"
type="pl2.notes.struts.actions.NotesAnneeMatiere" type="pl2.notes.struts.actions.NotesAnneeMatiere"
name="NotesAnneeMatiereForm" name="NotesAnneeMatiereForm"
input="/formulaireAnneeMatiere.jsp" input="/formulaireAnneeMatiere.jsp"
scope="request" scope="request" > >
<forward <forward name="histotableau" name="histotableau" path="/tableau.jsp"/> path="/tableau.jsp"/>
<forward <forward name="histographique" name="histographique" path="/histographic"/> path="/histographic"/>
</action> </action>
Classe de l'action
</action-mappings> </action-mappings>

URL correspondant à l'action (suffixe « .do » implicite)

Nom de l'ActionForm associée

Vue vers laquelle le contrôleur redirige en cas d'echec de la validation

web.xml

Etiquette de redirection

if (f.getPresentation().equals("graphic")) { return mapping.findForward("histotagraphique"); } else { return mapping.findForward("histotableau");

}

Chemin de redirection

tableau.jsp

.jsp
.jsp

HistogramImager

); } Chemin de redirection tableau.jsp .jsp HistogramImager <servlet>

<servlet> <servlet-name>graphic</servlet-name> <servlet-class>

pl2.notes.servlets.HistogramImager

</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>graphic</servlet-name>

<url-pattern>/histographic</url-pattern>

</servlet-mapping>

</servlet-mapping> © Philippe GENOUD UJF Février 2010 28
</servlet-mapping> © Philippe GENOUD UJF Février 2010 28
</servlet-mapping> © Philippe GENOUD UJF Février 2010 28

© Philippe GENOUD

UJF

Février 2010

28

ActionAction

Action Action assistant NetBeans pour créer une Action 1 2 3 29
assistant NetBeans pour créer une Action 1 2 3 29
assistant NetBeans pour créer une Action
1
2
3
29

ActionAction

Action Action assistant NetBeans pour créer une Action suite Clic bouton droit 3 1 2 ©

assistant NetBeans pour créer une Action suite

Action assistant NetBeans pour créer une Action suite Clic bouton droit 3 1 2 © Philippe
Clic bouton droit 3 1 2
Clic
bouton
droit
3
1
2
assistant NetBeans pour créer une Action suite Clic bouton droit 3 1 2 © Philippe GENOUD
assistant NetBeans pour créer une Action suite Clic bouton droit 3 1 2 © Philippe GENOUD
assistant NetBeans pour créer une Action suite Clic bouton droit 3 1 2 © Philippe GENOUD

© Philippe GENOUD

UJF

Février 2010

30

ExceptionsExceptions public class NotesAnneeMatiere extends Action { private final static String HISTO_TABLE =
ExceptionsExceptions
public class NotesAnneeMatiere extends Action {
private final static String HISTO_TABLE = "histotableau";
private final static String HISTO_GRAPHIC = "histographique";
NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere NotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiereNotesAnneeMatiere
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
l'exception est relancée
throws Exception
{
NotesAnneeMatiereActionForm f =
(NotesAnneeMatiereForm) form;
Que se passe-t'il si une
DAOException est levée ?
INotesDAO notesDAO = DAOFactory().getNoteDAO();
Histogramme histo = notesDAO.getHistogramme(f.getNumeroAnnee(), f.getMatiere() );
request.setAttribute("notes", histo);
if (f.getPresentation().equals("graphic")) {
return mapping.findForward(HISTO_GRAPHIC);
} else {
return mapping.findForward(HISTO_TABLE);
}
}
}
© Philippe GENOUD
UJF
Février 2010
31

ExceptionsExceptions

Exceptions Exceptions Si l'exception est relancée et qu'aucun traitement n'est mis en place pour celle- ci,

Si l'exception est relancée et qu'aucun traitement n'est mis en place pour celle- ci, une ServletException est créée par le contrôleur , chaînée avec l'exception originale et relancée,

Servlet Exception

Cause mère

avec l'exception originale et relancée, Servlet Exception Cause mère © Philippe GENOUD UJF Février 2010 32
avec l'exception originale et relancée, Servlet Exception Cause mère © Philippe GENOUD UJF Février 2010 32
avec l'exception originale et relancée, Servlet Exception Cause mère © Philippe GENOUD UJF Février 2010 32
avec l'exception originale et relancée, Servlet Exception Cause mère © Philippe GENOUD UJF Février 2010 32

© Philippe GENOUD

UJF

Février 2010

32

ExceptionsExceptions

Exceptions Exceptions Possibilité de mettre en oeuvre un traitement spécifique des exceptions en redirigeant

Possibilité de mettre en oeuvre un traitement spécifique des exceptions en redirigeant l'application vers une page spécifique

en redirigeant l'application vers une page spécifique struts-config.xml clé pour message d'erreur dans le

struts-config.xml

vers une page spécifique struts-config.xml clé pour message d'erreur dans le fichier ressources la

clé pour message d'erreur dans le fichier ressources

la ressource vers laquelle l'application est redirigée

le type de l'exception concernée

pl2/notes/ApplicationResource.properties
pl2/notes/ApplicationResource.properties
l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33
l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33
l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33

erreur_1.jsp

l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33
l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33
l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33
l'exception concernée pl2/notes/ApplicationResource.properties erreur_1.jsp © Philippe GENOUD UJF Février 2010 33

© Philippe GENOUD

UJF

Février 2010

33

ExceptionsExceptions

Exceptions Exceptions Possibilité de mettre en oeuvre un traitement spécifique des exceptions en exécutant un

Possibilité de mettre en oeuvre un traitement spécifique des exceptions en exécutant un gestionnaire d'erreur : une classe héritant de org.apache.struts.actions.ExceptionHandler

redéfinition de la méthode execute la redirection s'effectue à l'aide d'un élément forward défini dans
redéfinition de la méthode execute
la redirection s'effectue à l'aide d'un
élément forward défini dans le fichier
struts-config.xml
La redirection peut être vers une action
ou une page jsp
struts-config.xml
être vers une action ou une page jsp struts-config.xml le lien entre un gestionnaire d'erreur et

le lien entre un gestionnaire d'erreur et un type d'erreur est effectué dans le fichier struts-config.xml

le type de l'exception concernée

le gestionnaire d'exceptions invoqué

le type de l'exception concernée le gestionnaire d'exceptions invoqué © Philippe GENOUD UJF Février 2010 34
le type de l'exception concernée le gestionnaire d'exceptions invoqué © Philippe GENOUD UJF Février 2010 34
le type de l'exception concernée le gestionnaire d'exceptions invoqué © Philippe GENOUD UJF Février 2010 34
le type de l'exception concernée le gestionnaire d'exceptions invoqué © Philippe GENOUD UJF Février 2010 34
le type de l'exception concernée le gestionnaire d'exceptions invoqué © Philippe GENOUD UJF Février 2010 34

© Philippe GENOUD

UJF

Février 2010

34

ExceptionsExceptions Une exception est traitée par le gestionnaire d'exception le plus spécifique Exceptions de
ExceptionsExceptions
Une exception est traitée par le gestionnaire d'exception le plus spécifique
Exceptions de n'importe quel autre
type
Exceptions de type DAOException
(classe DAOException ou n'importe
quelle sous classe de DAOException)
© Philippe GENOUD
UJF
Février 2010
35

ExceptionsExceptions

Exceptions Exceptions Possibilité de rédéfinir un gestionnaire spécifique au niveau d'une action gestionnaire

Possibilité de rédéfinir un gestionnaire spécifique au niveau d'une action

un gestionnaire spécifique au niveau d'une action gestionnaire général pour les DAOException gestionnaire

gestionnaire général pour les DAOException

gestionnaire spécifique pour les DAOException levées par l'action notesAnneeMatière

spécifique pour les DAOException levées par l'action notesAnneeMatière © Philippe GENOUD UJF Février 2010 36
spécifique pour les DAOException levées par l'action notesAnneeMatière © Philippe GENOUD UJF Février 2010 36
spécifique pour les DAOException levées par l'action notesAnneeMatière © Philippe GENOUD UJF Février 2010 36
spécifique pour les DAOException levées par l'action notesAnneeMatière © Philippe GENOUD UJF Février 2010 36

© Philippe GENOUD

UJF

Février 2010

36

ExceptionsExceptions

Exceptions Exceptions assistant NetBeans pour définir un gestionnaire d'exceptions struts-config.xml Clic bouton

assistant NetBeans pour définir un gestionnaire d'exceptions

struts-config.xml

Clic

bouton

droit

1
1
2
2
3
3
un gestionnaire d'exceptions struts-config.xml Clic bouton droit 1 2 3 © Philippe GENOUD UJF Février 2010
un gestionnaire d'exceptions struts-config.xml Clic bouton droit 1 2 3 © Philippe GENOUD UJF Février 2010
un gestionnaire d'exceptions struts-config.xml Clic bouton droit 1 2 3 © Philippe GENOUD UJF Février 2010

© Philippe GENOUD

UJF

Février 2010

37

StrutsStruts TagLibsTagLibs

Struts Struts TagLibs TagLibs

Struts propose des bibliothèques de Tags Personnalisés qui aident les développeurs d'applications basées sur des formulaires

Struts propose 4 bibliothèques de tag

 

HTML

Tags pour création d'interface utilisateur HTML, en particulier pour créer des formulaires de saisie

Logic

Tags pour la génération conditionnelle de texte, génération répétitive de texte en itérant sur des collections d'objets, gestion du flux de contrôle de l'application

Bean

Tags pour la définition de nouveaux objets JavaBeans dans différentes portées (application, session, requête…) et à partir de différentes sources Tags pour afficher un bean (ou une proriété d'un bean) sur la réponse de sortie.

Nested

Tags qui étendent les tags de base de Struts pour leur mise en relation lors d'imbrication

© Philippe GENOUD UJF Février 2010 38
© Philippe GENOUD UJF Février 2010 38
© Philippe GENOUD UJF Février 2010 38

© Philippe GENOUD

UJF

Février 2010

38

StrutsStruts TagLibsTagLibs

Struts Struts TagLibs TagLibs Exemple d'utilisation des tags HTML formulaireAnnneeMatiere.jsp Il faudrait intégrer

Exemple d'utilisation des tags HTML

formulaireAnnneeMatiere.jsp Il faudrait intégrer dans la page de la logique permettant de réaffecter les éléments
formulaireAnnneeMatiere.jsp
Il faudrait intégrer
dans la page de la
logique permettant de
réaffecter les
éléments du formulaire
avec les valeurs qui
avaient été transmises
Problème : les différents éléments
du formulaire reprennent leur
valeur initiale
En cas de saisie
incorrecte on
revient sur cette
page qui affiche
alors les messages
d'erreur
on revient sur cette page qui affiche alors les messages d'erreur © Philippe GENOUD UJF Février
on revient sur cette page qui affiche alors les messages d'erreur © Philippe GENOUD UJF Février
on revient sur cette page qui affiche alors les messages d'erreur © Philippe GENOUD UJF Février

© Philippe GENOUD

UJF

Février 2010

39

StrutsStruts TagLibsTagLibs

Struts Struts TagLibs TagLibs Exemple d'utilisation des tags HTML formulaireAnnneeMatiere.jsp Les tags HTML de Sruts

Exemple d'utilisation des tags HTML

formulaireAnnneeMatiere.jsp
formulaireAnnneeMatiere.jsp

Les tags HTML de Sruts prennent en charge l'initialisation des éléments du formulaire en cas de retour

en charge l'initialisation des éléments du formulaire en cas de retour © Philippe GENOUD UJF Février
en charge l'initialisation des éléments du formulaire en cas de retour © Philippe GENOUD UJF Février
en charge l'initialisation des éléments du formulaire en cas de retour © Philippe GENOUD UJF Février

© Philippe GENOUD

UJF

Février 2010

40