Вы находитесь на странице: 1из 40

framework MVC

pour applications Web


Servlets – JSP

© Philippe GENOUD UJF Février 2010 1


Rappel Architecture MVC
Serveur Internet (Serveur HTTP + Serveur Servlet/JSP) Serveur SGBD

Requête HTTP
Controleur
Controleur Construit
1
(Servlet)
(Servlet) Modifie

2 Modèle
Modèle Driver
Transfert (Java
(JavaBean)
Bean) JDBC

Réponse HTTP
Vue
Vue 3 Consulte
(JSP)
(JSP)

 Bonne séparation des différents composants d’une application Web


 Modularité – réutilisation – évolutivité

 Séparation des compétences

© Philippe GENOUD UJF Février 2010 2


Frameworks Web
 maismettre 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


C'est quoi un
framework ?

 Dans le monde Java :


 Struts (Apache)  maisaussi dans de nombreux
 Java Server Faces (SUN) autres langages :
 Spring MVC  Symfony (PHP)

 Tapestry (Apache)  Ruby On Rails (Ruby)

 Stripes  Django (Python)

 Wicket (Apache)  Grails (Groovy)

… …

© Philippe GENOUD UJF Février 2010 3


Framework
 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

© Philippe GENOUD UJF Février 2010 4


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

Requête HTTP
Controleur
Controleur Construit
1
(Servlet)
(Servlet) Modifie

2 Modèle
Modèle Driver
Transfert (Java
(JavaBean)
Bean) JDBC

Réponse HTTP
Vue
Vue 3 Consulte
(JSP)
(JSP)

 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

© Philippe GENOUD UJF Février 2010 5


Struts c'est quoi ?

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

 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

 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.

© Philippe GENOUD UJF Février 2010 6


 Exemple d'application Struts

© Philippe GENOUD UJF Février 2010 7


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

 Struts 1.x

dernière version : 1.3.10


au 2/02/1020
version intégrée à NetBeans (6.7): 1.3.8

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

guide
utilisateur

© Philippe GENOUD UJF Février 2010 8


Architecture générale de Struts
Fichier xml
Regroupent les
mapping vers les
actions et les vues paramètres de la
requête, qu'ils
peuvent valider
traitement la requête

ActionForm
ActionForm
struts-
struts-config.xml
struts-
struts-config.xml Font le lien
ActionForm1
ActionForm1
ActionForm2
entre le
consulte ActionForm2 contrôleur et la
La requête est transmise logique métier Serveur
au contrôleur SGBD
1

ActionServlet 2 Action
ActionServlet Action
Controleur générique
Action1
Action1
(étend javax.servlet.
Action2
Action2
http.HttpServlet)

4
« package» et aiguille
le trafic HTTP vers le Modèle
Modèle
Contrôleur (Java
gestionnaire approprié (JavaBean)
Bean)
3
Choix et paramétrage de la vue selon Vue
la réponse de l'action et l’état du Vue Création
contrôleur (JSP)
(JSP) modification des
objets modèle

© Philippe GENOUD UJF Février 2010 9


Architecture générale de Struts

Génération de la
page HTML
5

page Modèle
page.jsp
.jsp Modèle
(Java
(JavaBean)
6
Bean)
Envoi au client de la consulte
présentation issue de la
vue

JSTL
Struts propose des JSTL properties.en
properties.en
bibliothèques de Tags Struts
pour faciliter la Struts properties.fr
html, logic,beans
html, logic,beans properties.fr
construction des
pages JSP …biblio
…biblioperso
perso Ressources

Bibliothèques de tags
Fichiers de ressources
Vue pour messages
utilisés dans les vues

© Philippe GENOUD UJF Février 2010 10


Struts
Struts par
par l'exemple:
l'exemple: l’application
l’application histogramme
histogramme de
de notes
notes

serveur Web
Serveur SGBD

Histogramme des notes


image gif
Page HTML avec fré
fréquences
des notes dans un tableau

© Philippe GENOUD UJF Février 2010 11


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

Fichiers de
configuration
struts

Fichier de
ressources
pour les
messages

Librairies struts
© Philippe GENOUD UJF Février 2010 12
Configuration
Configuration :: web.xml
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.

<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>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<init-param>
<param-name>config</param-name>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</init-param>
...
...
</servlet>
</servlet>
<servlet-mapping>
<servlet-mapping> La localisation du fichier de
<servlet-name>action</servlet-name>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern> configuration struts-config.xml
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</servlet-mapping>
...
...
</web-app>
</web-app>

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 struts

© Philippe GENOUD UJF Février 2010 13


Configuration
Configuration :: struts-config.xml
struts-config.xml
 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

© Philippe GENOUD UJF Février 2010 14


Simple redirection
 Action correspondant à une requête sans paramètres nécessitant une
simple redirection

accueil.html
formulaireAnneeMatiere.jsp
formulaireAnneeMatiere.do
ActionServlet
ActionServlet .jsp

struts-config.xml
<struts-config>
<struts-config> définit le nom de l’URL
...
... correspondant à l'action
<action-mappings>
<action-mappings> (suffixe « .do » implicite)
<action path="/formulaireAnneeMatiere"
forward="/formulaireAnneeMatiere.jsp"/>
</action-mappings>
</action-mappings>
...
... l’URL à laquelle est relayée
</struts-config>
</struts-config> la demande

© Philippe GENOUD UJF Février 2010 15


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

1
Clic bouton droit

© Philippe GENOUD UJF Février 2010 16


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

notesAnneeMatiere.do
tableau.jsp

formulaireAnneeMatiere.jsp

HistogramImager (servlet)

© Philippe GENOUD UJF Février 2010 17


Action avec traitement
Action ActionForm
Action ActionForm

ActionServlet
ActionServlet
NotesAnneeMatiere NotesAnneeMatiereForm
NotesAnneeMatiere NotesAnneeMatiereForm
notesAnneeMatiere.do?
annee=2005&
matiere=BD&
Instancie et initialise
struts-
struts-config.xml
présentation=tableau
struts-
struts-config.xml setAnnee(…), setMatiere(…) …

formulaireAnneeNote.jsp validate(…)

.jsp ActionErrors

Histogramme
Si erreur Consulte
sinon execute(…) getAnnee(…), getMatiere(…) Histogramme

Initialise le modèle

tableau.jsp ActionForward

.jsp
struts-
struts-config.xml
struts-
HistogramImager Selon struts-config.xml
l'ActionForward

© Philippe GENOUD UJF Février 2010 18


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

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

 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

© Philippe GENOUD UJF Février 2010 19


ActionForm
ActionForm
ActionForm

public class NotesAnneeMatiereForm extends ActionForm { NotesAnneeMatiereForm


public class NotesAnneeMatiereForm extends ActionForm { NotesAnneeMatiereForm
private
private String
String annee;
annee; propriété
private String presentation;
private String presentation;
private
private String
String matiere;
matiere;

Chaque paramètre du
public
public void
void setAnnee(String
setAnnee(String annee)
annee) {{ formulaire est défini
this.annee = annee;
this.annee = annee; comme une propriété
}} modifieur et
accesseur pour de l'objet ActionForm
public
public String
String getAnnee()
getAnnee() {{ la propriété
return
associé qui doit être
return annee;
annee; un JavaBean
}
}
public void setMatiere(String matiere) {
public void setMatiere(String matiere) {
this.matiere
this.matiere == matiere;
matiere;
}
}
...
...
}}

© Philippe GENOUD UJF Février 2010 20


ActionForm
extends ActionForm
public
public class
class NotesAnneeMatiereForm
NotesAnneeMatiereForm extends ActionForm {{
ActionForm
private
private String
String annee;
annee; ActionForm
private String presentation;
private String presentation;
private
private String
String matiere;
NotesAnneeMatiereForm
matiere;
NotesAnneeMatiereForm
...
... Redéfinition (overriding) de la méthode validate
@Override
@Override
public ActionErrors
public ActionErrors validate(ActionMapping
validate(ActionMapping mapping,
mapping,
HttpServletRequest request) {
HttpServletRequest request) {
ActionErrors errors = new ActionErrors(); Création d'un objet erreur vide
ActionErrors errors = new ActionErrors();

(annee ==
== null || annee.length()
annee.length() << 1)
if
if (annee null || 1) {{
errors.add("Année", new ActionMessage("error.annee.required"));
errors.add("Année", new ActionMessage("error.annee.required"));
}}
else {
else { Selon les paramètres ajout de
try {
try { messages d'erreur
numeroAnnee = Integer.parseInt(annee);
numeroAnnee = Integer.parseInt(annee);
}} catch
catch (NumberFormatException
(NumberFormatException e) e) {{
errors.add("Année",
errors.add("Année", newnew ActionMessage("error.annee.isNotANumber"));
ActionMessage("error.annee.isNotANumber"));
}}

}}
if
if ((!matiere.equals("graphic"))
((!matiere.equals("graphic")) &&&& ((!matiere.equals("tableau"))
((!matiere.equals("tableau")) {{
errors.add("Année", new ActionMessage("error.annee.required"));
errors.add("Année", new ActionMessage("error.annee.required"));
}} Le message est défini dans
un fichier .properties
return errors;
return errors; Renvoie des erreurs (vide si la validation a réussi)
}}
}}

© Philippe GENOUD UJF Février 2010 21


ActionForm
 les messages d'erreurs sont définis dans le fichier
properties de l'application
errors.add("Année", new ActionMessage("error.annee.isNotANumber"));

pl2/notes/ApplicationResource.properties
errors.header=<UL>
errors.header=<UL>
errors.prefix=<LI><span
errors.prefix=<LI><span style="color:
style="color: red">
red">
errors.suffix=</span></LI>
errors.suffix=</span></LI>
...
...
error.annee.required=Indiquez
error.annee.required=Indiquez l'année
l'année
error.annee.isNotANumber=L'année doit être un nombre
error.annee.isNotANumber=L'année doit être un nombre
...
...
formulaireAnneeMatiere.jsp
<%@
<%@ 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
<H1>Histogramme des
des notes</H1>
notes</H1>
<HR>
<HR>
<form action="notesAnneeMatiere.do" method="post">
<form action="notesAnneeMatiere.do" method="post">


</form>
</form>
<HR>
<HR> Tag de bibliothèque html
<html:errors/>
<html:errors/> de Struts pour afficher les
</body>
</body> messages d'erreur
</html>
</html>

© Philippe GENOUD UJF Février 2010 22


ActionForm
 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>
errors.prefix=<LI><span style="color: red">
errors.prefix=<LI><span style="color: red"> pl2/notes/ApplicationResource.properties.en
errors.suffix=</span></LI>
errors.suffix=</span></LI>
... errors.header=<UL>
... errors.header=<UL>
error.annee.required=Indiquez l'année errors.prefix=<LI><span style="color: red">
error.annee.required=Indiquez l'année errors.prefix=<LI><span style="color: red">
error.annee.isNotANumber=L'année
error.annee.isNotANumber=L'année doit
doit être
être un nombre
errors.suffix=</span></LI>
un nombre
errors.suffix=</span></LI>
... ...
... ...
formHisto.title=Histogramme
formHisto.title=Histogramme de
de notes
notes error.annee.required=Year required
error.annee.required=Year required
error.annee.isNotANumber=Year
error.annee.isNotANumber=Year is is not
not aa number
number
...
...
formHisto.title=Marks Histogram
formulaireAnneeMatiere.jsp formHisto.title=Marks 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> <bean:message
Histogramme key="formHisto.title"/>
des notes </H1>
<H1> Histogramme des notes </H1>
<HR>
<HR>
<form
<form action="notesAnneeMatiere.do"
action="notesAnneeMatiere.do" method="post">
method="post">
……
</form>
</form>
<HR>
<HR>
<html:errors/>
<html:errors/>
</body>
</body>
</html>
</html>
© Philippe GENOUD UJF Février 2010 23
ActionForm
 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
<form-beans> l'action form
<form-beans>
<form-bean
<form-bean
name="NotesAnneeMatiereForm"
name="NotesAnneeMatiereForm"
type="pl2.notes.struts.forms.NotesAnneeMatiereForm"/>
type="pl2.notes.struts.forms.NotesAnneeMatiereForm"/>
...
...
</form-beans> Nom de la classe Java
</form-beans>
...
...
<struts-config>
<struts-config>

© Philippe GENOUD UJF Février 2010 24


ActionForm
 assistant NetBeans pour créer une ActionForm

1
nom de la classe

© Philippe GENOUD UJF Février 2010 25


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

 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

© Philippe GENOUD UJF Février 2010 26


Action
Action
public class NotesAnneeMatiere extends Action { Action

NotesAnneeMatiere
private final static String HISTO_TABLE = "histotableau"; NotesAnneeMatiere
private final static String HISTO_GRAPHIC = "histographique";

public ActionForward execute(ActionMapping mapping,


ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {

NotesAnneeMatiereActionForm f = Récupération de l'objet


(NotesAnneeMatiereForm) form; ActionForm grâce au
paramètre form
INotesDAO notesDAO = DAOFactory().getNoteDAO();
Histogramme histo = notesDAO.getHistogramme(f.getNumeroAnnee(),
Construction
f.getMatiere() );
du modèle
request.setAttribute("notes", histo);
Le modèle est transmis via la
if (f.getPresentation().equals("graphic")) { requête
return mapping.findForward(HISTO_GRAPHIC);
} else {
return mapping.findForward(HISTO_TABLE); Choix de la prochaine
} redirection

}
}

© Philippe GENOUD UJF Février 2010 27


Action
 Declaration de l'Action dans le fichier struts-config.xml
<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 forward="/formulaireAnneeMatiere.jsp" path="/formulaireAnneeMatiere"/>
<action forward="/formulaireAnneeMatiere.jsp" path="/formulaireAnneeMatiere"/>
<action URL correspondant à l'action
<action path="/notesAnneeMatiere"
path="/notesAnneeMatiere" (suffixe « .do » implicite)
type="pl2.notes.struts.actions.NotesAnneeMatiere"
type="pl2.notes.struts.actions.NotesAnneeMatiere"
name="NotesAnneeMatiereForm"
name="NotesAnneeMatiereForm" Classe de l'action
input="/formulaireAnneeMatiere.jsp"
input="/formulaireAnneeMatiere.jsp" Nom de l'ActionForm
scope="request" >
scope="request" > associée
<forward name="histotableau" path="/tableau.jsp"/>
<forward name="histotableau" path="/tableau.jsp"/> Vue vers laquelle le
<forward name="histographique" path="/histographic"/>
<forward name="histographique" path="/histographic"/> contrôleur redirige en cas
</action>
</action> d'echec de la validation
</action-mappings>
</action-mappings>
web.xml
<servlet>
Etiquette de redirection Chemin de redirection <servlet-name>graphic</servlet-name>
<servlet-class>
if (f.getPresentation().equals("graphic")) { pl2.notes.servlets.HistogramImager
return mapping.findForward("histotagraphique"); tableau.jsp HistogramImager </servlet-class>
} else { </servlet>
<servlet-mapping>
return mapping.findForward("histotableau"); .jsp <servlet-name>graphic</servlet-name>
} <url-pattern>/histographic</url-pattern>
</servlet-mapping>

© Philippe GENOUD UJF Février 2010 28


Action
 assistant NetBeans pour créer une Action
1

© Philippe GENOUD UJF Février 2010 29


Action
 assistant NetBeans pour créer une Action suite

Clic
bouton
droit 3
1

© Philippe GENOUD UJF Février 2010 30


Exceptions
Action
public class NotesAnneeMatiere extends Action { Action

NotesAnneeMatiere
private final static String HISTO_TABLE = "histotableau"; NotesAnneeMatiere
private final static String HISTO_GRAPHIC = "histographique";

public ActionForward execute(ActionMapping mapping,


ActionForm form, l'exception est relancée
HttpServletRequest request,
HttpServletResponse response) 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


Exceptions
 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

© Philippe GENOUD UJF Février 2010 32


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

struts-config.xml 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

erreur_1.jsp

© Philippe GENOUD UJF Février 2010 33


Exceptions
 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 le fichier
struts-config.xml
La redirection peut être vers une action
ou une page jsp

struts-config.xml

le lien entre un gestionnaire d'erreur et


le type de l'exception un type d'erreur est effectué dans le
concernée fichier struts-config.xml

le gestionnaire
d'exceptions
invoqué
© Philippe GENOUD UJF Février 2010 34
Exceptions
 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


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

gestionnaire général pour les


DAOException

gestionnaire spécifique pour les


DAOException levées par l'action
notesAnneeMatière

© Philippe GENOUD UJF Février 2010 36


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

1 2

© Philippe GENOUD UJF Février 2010 37


Struts 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


Struts TagLibs
 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 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

© Philippe GENOUD UJF Février 2010 39


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

Les tags HTML de Sruts prennent en charge l'initialisation des


éléments du formulaire en cas de retour

© Philippe GENOUD UJF Février 2010 40

Вам также может понравиться