STRUTS

Transcription

STRUTS
STRUTS
Michael Fortier
Master Informatique 2ème année
[email protected]
A308, Université de Paris 13
https ://lipn.univ-paris13.fr/∼fortier/Enseignement/Struts/
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
2 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
3 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Design Pattern
Ainsi, au fil du temps, les développeurs se sont aperçus que certaines
conceptions devenaient récurrentes face à certaines situations.
Patron de conception :
Manière de construire la structure d’une classe
Description d’une solution générale à un problème qui revient
souvent
Basé sur des expériences passées avec les mêmes structures
http://www.javacamp.org/designPattern/
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
4 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Séparation des couches applicatives
→ Design Pattern associé : Modèle Vue Contrôleur
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
5 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principe de fonctionnement du MVC
Modèle : données et règles métiers
Vue : IHM
Contrôleur : interception et redirection
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
6 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
MVC : processus
L’utilisateur émet une requête
Le contrôleur intercepte la requête de l’utilisateur
Le contrôleur détermine quelle partie du modèle est concernée et
quelle vue y est associée
Le modèle traite les interactions avec les données, applique les
règles métier et renvoie les données au contrôleur
Le contrôleur sélectionne la vue et lui renseigne les données
La vue présente les données à l’utilisateur
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
7 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
MVC2 (1)
MVC : multitude de contrôleurs à implémenter
lourd à mettre en place
→ MVC2 : un seul contrôleur se charge de rediriger la requête vers le
bon traitement
Le contrôleur unique devient le point d’entrée exclusif de
l’application
il est alors facile de gérer :
les accès
les droits
les statistiques
toute autre fonctionnalité transverse
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
8 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
MVC2 (2)
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
9 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Inconvénients du MVC
Trop complexe pour de petites applications
Le temps accordé à l’architecture pas forcément rentable pour le
projet
Même si le code est factorisé, le nombre de micro-composants
n’en est pas moins augmenté
Nombre important de fichiers → charge non négligeable dans un
projet
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
10 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
11 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Le framework STRUTS
Java
Opensource, soutenu par l’Apache Software Foundation
http://struts.apache.org
v. 2.3.20
Nécessite : Servlet API 2.4, JSP API 2.0, Java 5
Respecte le modèle MVC
Plugins, dont Netbeans (non utilisé en TP)
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
12 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Ecrire une application STRUTS
Niveau de complexité et de mise en route important
Simplification des choses quand l’application prend de
l’importance
Quantité importante de fichiers → arborescence complexe
→ il faut l’adapter au projet
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
13 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Adaptation du MVC
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
14 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Intercepteurs
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
15 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Fonctionnement général
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
16 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Mise en oeuvre
Définir les vues (formulaires / autres)
Formulaires contiennent les infos :
classe Bean qui contient les données du formulaire + validations
classe Action chargée de traitée le formulaire
le nom de toutes les vues possibles
Chaque vue fait l’objet d’une page JSP
Ecrire les classes Javabean correspondant aux vues formulaires
Ecrire les classes Action chargées de traiter les formulaires
Ecrire les éventuelles classes métier ou d’accès aux données
Modifier le fichier de configuration de Struts
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
17 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Exemple d’arborescence des sources
src - java
action
ClasseAction1.java
ClasseAction2.java
actionForm
ClasseFormAction1.java
ClasseFormAction2.java
properties
ApplicationResource.properties
utils
datasource
databeans
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
18 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Arborescence des vues
Dépend du nombre de pages à afficher
Dans le cadre du TP : une dizaine de vues
→ à la racine
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
19 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Le rendu HTML
Dans une page JSP, le développeur peut :
récupérer des objets dans la requête (request.getAttribute(...)), la
session (session.getAttribute(...), ou le contexte de l’application
inclure des parties dynamiques dans le code HTML au moyen de
variables <%= variable %>
comporter du code Java <% code Java %>
STRUTS ajoute des bibliothèques de balises (taglib) :
struts-html
struts-logic (logique d’exécution)
struts-bean (accès aux objets contenus dans la requête, la
session, le contexte)
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
20 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
ActionServlet
TP/STRUTS/web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-cl
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
21 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Framework Fonctionnement Utilisation Configuration Debug
Debugging
Visualiser la configuration de Struts
Ajouter struts2-config-browser-plugin-x.x.x.x.jar
Ajouter dans une page le lien
<a href="<s :url action="index" namespace="config-browser"
/>">Configuration de Struts</a>
Accès direct :
http ://localhost :8080/HELLO/config-browser/actionNames.action
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
22 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
23 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Exemple simple : Hello World
Formulaire avec un champ text et un bouton
si l’information est "bonjour" -> affichage vue "Succès"
sinon -> affichage vue "Erreur"
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
24 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Ecriture de la vue Formulaire
TP/HELLO/web/index.jsp
<%@page contentType="text/html; charset=UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>HELLO</title>
</head>
<body>
<h2>Application HELLO</h2>
<s:form action="hello" >
<s:textfield name="message" label="Message" />
<s:submit />
</s:form>
</body>
</html>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
25 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Ecriture de la vue "Succes"
TP/HELLO/web/succes.jsp
<%@page contentType="text/html; charset=UTF-8" %>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>HELLO</title>
</head>
<body>
<h2>Application HELLO</h2>
<h3><s:property value="message" /></h3>
</body>
</html>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
26 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Ecriture de la vue "Erreur"
TP/HELLO/web/erreur.jsp
<%@page contentType="text/html; charset=UTF-8" %>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>HELLO</title>
</head>
<body>
<h1>Erreur</h1>
Il fallait entrer le message "bonjour"
</body>
</html>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
27 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Implémentation de l’action
TP/HELLO/src/java/action/Hello.java
package action;
import com.opensymphony.xwork2.ActionSupport;
public class Hello extends ActionSupport {
private String message;
public String execute() throws Exception {
if (message.equalsIgnoreCase("bonjour")) {
return "succes";
} else {
return "erreur";
}
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
28 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Vues Action Contrôleur
Configuration du contrôleur
TP/HELLO/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="test" extends="struts-default">
<action name="hello" class="action.Hello" method="execute">
<result name="succes">succes.jsp</result>
<result name="erreur">erreur.jsp</result>
<result name="input">index.jsp</result>
</action>
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
29 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
30 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib
Eviter code Java dans les JSP
→ Faciliter la création d’un designer
Afficher des données dynamiques
<s:textfield name="postalCode"/>
Afficher un label avec le champs input
<s:textfield key="postalCode.label" name="postalCode"/>
Les valeurs sont des objets
<s:textfield key="pays.label" name="pays" value="%{’FRANCE’}" />
Sinon, évaluées comme expression
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
31 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : 3 librairies Struts
HTML : formulaires
BEAN : instancier une classe dans une JSP
LOGIC : tests, itérations...
TP/TAGS/web/index.jsp
<%@taglib prefix="s" uri="/struts-tags" %>
<html:html>
...
</html:html>
http://www.roseindia.net/struts/struts2/struts-2-tags.shtml
http://struts.apache.org/2.3.8/docs/ui-tag-reference.html
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
32 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : mise en place
TP/STRUTS/web.xml
<taglib>
<taglib-uri>StrutsHtml</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
33 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : BEAN (1)
TP/TAGS/src/java/model/Convertisseur.java
package model;
public class Convertisseur {
private double francs;
private double euros;
public double getEuros() {
return francs / 6.55957;
}
public void setEuros(double euros) {
this.euros = euros;
}
public double getFrancs() {
return euros * 6.55957;
}
public void setFrancs(double francs) {
this.francs = francs;
}
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
34 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : BEAN (2)
TP/TAGS/web/convertisseur.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>CONVERTISSEUR</title>
</head>
<body>
<h1>Convertisseur de devise</h1>
<s:bean name="model.Convertisseur" var="converter1">
<s:param name="euros" value="100"></s:param>
</s:bean>
<s:bean name="model.Convertisseur" var="converter2">
<s:param name="francs" value="100"></s:param>
</s:bean>
100 francs = <s:property value="#converter2.euros" /> euros
<br>
100 euros = <s:property value="#converter1.francs" /> francs
</body>
</html>
http://localhost:8080/TAGS/convertisseur.jsp
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
35 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : LOGIC (1)
TP/TAGS/src/java/model/IndividuModel.java
package model;
public class IndividuModel {
String identifiant;
String courriel;
public IndividuModel(){}
public IndividuModel(String identifiant,String courriel){
this.identifiant=identifiant;
this.courriel=courriel;
}
// Accesseurs...
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
36 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : LOGIC (2)
TP/TAGS/src/java/action/IteratorAction.java
public class IteratorAction extends ActionSupport {
private List individusList;
public String execute() {
individusList = new ArrayList<IndividuModel>();
individusList.add(new IndividuModel("michael", "[email protected]"));
individusList.add(new IndividuModel("christophe", "[email protected]"));
individusList.add(new IndividuModel("frederique", "[email protected]"));
return "succes";
}
public List getIndividusList() {
return individusList;
}
public void setIndividusList(List individusList) {
this.individusList = individusList;
}
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
37 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : LOGIC (3)
TP/TAGS/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="test" extends="struts-default">
...
<action name="iteratorTag" class="action.IteratorAction">
<result name="succes">/tag_logic.jsp</result>
</action>
...
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
38 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Taglib : LOGIC (4)
TP/TAGS/web/tag_logic.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>TAG LOGIC</title>
</head>
<body>
<h1>TAG LOGIC</h1>
<s:iterator value="individusList">
<s:property value="identifiant"/> : <s:property value="courriel"/><br>
</s:iterator>
</body>
</html>
→ http://localhost:8080/TAGS/iteratorTag.action
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
39 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Liens
TP/TAGS/web/index.jsp
<li>Bean
: <a href="http://localhost:8080/TAGS/convertisseur.jsp">Convertisseur</a></li>
<li>Logic : <a href="<s:url action=’iteratorTag’/>">Iterator</a></li>
<s:url action="populateEnregistrement" var="enregistrement">
<s:param name="titre">Formulaire</s:param>
</s:url>
<li>Html : <a href="${enregistrement}">Enregistrement</a></li>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
40 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Formulaires
Champs de formulaires
textfield
password
radio
select
textarea
checkboxlist
checkbox
submit
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
41 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Textfield
TP/TAGS/web/enregistrement.jsp
<s:textfield name="nom" label="Nom" value=""/>
TP/TAGS/src/java/action/EnregistrementAction.java
private String nom;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
42 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Password
TP/TAGS/web/enregistrement.jsp
<s:password name="password" label="Mot de passe" />
TP/TAGS/src/java/action/EnregistrementAction.java
private String mdp;
public String getMdp() {
return mdp;
}
public void setMdp(String mdp) {
this.mdp = mdp;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
43 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Radio
TP/TAGS/web/enregistrement.jsp
<s:radio name="sexe" label="Sexe" list="{’Homme’,’Femme’}" />
TP/TAGS/src/java/action/EnregistrementAction.java
private String sexe;
public String getSexe() {
return sexe;
}
public void setSexe(String sexe) {
this.sexe = sexe;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
44 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Select
TP/TAGS/web/enregistrement.jsp
<s:select name="pays" list="paysList" listKey="id"
listValue="nom" headerKey="0"
headerValue="Pays" label="Choisissez un pays" />
TP/TAGS/src/java/action/EnregistrementAction.java
private String pays;
private ArrayList<Pays> paysList;
public String getPays() {
return pays;
}
public void setPays(String pays) {
this.pays = pays;
}
public ArrayList<Pays> getPaysList() {
return paysList;
}
public void setPaysList(ArrayList<Pays> paysList) {
this.paysList = paysList;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
45 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Textarea
TP/TAGS/web/enregistrement.jsp
<s:textarea name="remarque" label="Remarque" />
TP/TAGS/src/java/action/EnregistrementAction.java
private String remarque;
public String getRemarque() {
return remarque;
}
public void setRemarque(String remarque) {
this.remarque = remarque;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
46 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Checkboxlist
TP/TAGS/web/enregistrement.jsp
<s:checkboxlist list="communauteList" name="communaute"
label="Communaute" />
TP/TAGS/src/java/action/EnregistrementAction.java
private String[] communaute;
private ArrayList<String> communauteList;
public String[] getCommunaute() {
return communaute;
}
public void setCommunaute(String[] communaute) {
this.communaute = communaute;
}
public ArrayList<String> getCommunauteList() {
return communauteList;
}
public void setCommunauteList(ArrayList<String> communauteList) {
this.communauteList = communauteList;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
47 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Checkbox
TP/TAGS/web/enregistrement.jsp
<s:checkbox name="mailingList" label="Abonnement a la liste de diffusio
TP/TAGS/src/java/action/EnregistrementAction.java
private Boolean mailingList;
public Boolean getMailingList() {
return mailingList;
}
public void setMailingList(Boolean mailingList) {
this.mailingList = mailingList;
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
48 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Submit
TP/TAGS/web/enregistrement.jsp
<s:submit value="Enregistrer" />
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
49 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Peuplement
TP/TAGS/src/java/action/EnregistrementAction.java
public String populate() {
paysList = new ArrayList<Pays>();
paysList.add(new Pays(1, "Allemagne"));
paysList.add(new Pays(2, "USA"));
paysList.add(new Pays(3, "France"));
communauteList = new ArrayList<String>();
communauteList.add("Java");
communauteList.add(".Net");
communauteList.add("Linux");
communaute = new String[]{"Java",".Net"};
mailingList = true;
return "populate";
}
http://localhost:8080/TAGS/populateEnregistrement.action
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
50 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Généralités BEAN LOGIC HTML
Configuration de Struts
TP/TAGS/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="test" extends="struts-default">
...
<action name="*Enregistrement" method="{1}" class="action.EnregistrementAction">
<result name="populate">/enregistrement.jsp</result>
<result name="input">/enregistrement.jsp</result>
<result name="succes">/enregistrement_succes.jsp</result>
</action>
...
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
51 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
52 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Workflow global
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
53 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Workflow
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
54 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Intérêts
Flexibilité : on ajoute les intercepteurs où c’est nécessaire
Propreté/lisibilité du code → on se focalise sur l’action
Réutilisabilité
Tests facilités
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
55 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Exemple : journalisation (logging)
TP/VALIDATION/src/java/action/Login.java
public class Logging implements Interceptor{
public String intercept(ActionInvocation invocation) throws Exception {
String className = invocation.getAction().getClass().getName();
long startTime = System.currentTimeMillis();
System.out.println("Avant l’appel de l’action: " + className);
String result = invocation.invoke();
long endTime = System.currentTimeMillis();
System.out.println("Apres l’appel de l’action: " + className
+ " Duree: " + (endTime - startTime) + " ms");
return result;
}
public void destroy() {
System.out.println("Destruction de l’intercepteur Logging...");
}
public void init() {
System.out.println("Initialisation de l’intercepteur Logging...");
}
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
56 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Configuration de l’intercepteur dans Struts
TP/VALIDATION/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
...
<interceptors>
<interceptor name="mylogging" class="intercepteur.Logging" />
<interceptor-stack name="loggingStack">
<interceptor-ref name="mylogging" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
...
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
57 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Configuration de l’action
TP/VALIDATION/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
...
<action name="LoginIntercept" class="action.Login">
<interceptor-ref name="loggingStack"></interceptor-ref>
<result name="input">/login.jsp</result>
<result name="success">/accueil.jsp</result>
</action>
...
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
58 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Intercepteurs
Pile d’intercepteurs
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
59 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Intercepteurs
Pile d’intercepteur
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
60 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
2 méthodes de validation
Contrôle de surface (qualitative)
Périfier que les données saisies sont bien dans la forme attendue
Ex : une donnée numérique ne contient que des chiffres
Validation sémantique
Vérifier que la valeur saisie est bien celle qui est attendue par le
système
Ex : un numéro de carte bleue valide
Méthode validate() des ActionForms
Utilisation d’un fichier XML de la forme ActionClass-validation.xml
http://struts.apache.org/2.3.8/docs/validation.html
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
61 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Types de validateurs
required
requiredstring
int
long
short
double
date
expression
fieldexpression
email
url
visitor
conversion
stringlength
regex
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
62 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Valeurs de retour d’un formulaire - execute()
public static final String ERROR = "error"
public static final String INPUT = "input"
public static final String LOGIN = "login"
public static final String NONE = "none"
public static final String SUCCESS = "success"
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
63 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Exemple 1 : validation dans les ActionForms
TP/VALIDATION/web/login.jsp
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Page de connexion</title>
<s:head />
</head>
<body>
<s:form action="Login">
<s:textfield name="identifiant" label="Identifiant" />
<s:password name="mdp" label="Mot de passe" />
<s:submit value="Se connecter" />
</s:form>
</body>
</html>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
64 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Exemple 1 : validation dans les ActionForms →
Configuration
TP/VALIDATION/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
...
<action name="Login" class="action.Login">
<result name="input">/login.jsp</result>
<result name="success">/accueil.jsp</result>
</action>
...
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
65 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Exemple 1 : validation dans les ActionForms → Action
TP/VALIDATION/src/java/action/Login.java
public class Login extends ActionSupport {
private String identifiant;
private String mdp;
public String execute() {
return SUCCESS;
}
public void validate() {
if (getIdentifiant().length() == 0) {
addFieldError("identifiant", "L’identifiant est requis");
} else if (!getIdentifiant().equals("michael")) {
addFieldError("identifiant", "Utilisateur non autorise");
}
if (getMdp().length() == 0) {
addFieldError("mdp", "le mot de passe est obligatoire");
}
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
66 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Fonctionnement Intercepteurs Validation Exemple → validate() Exemple → XML
Exemple 2 : validation via XML
TP/VALIDATION/src/java/action/Login-validation.xml
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="identifiant">
<field-validator type="requiredstring">
<message>L’identifiant est obligatoire !</message>
</field-validator>
</field>
<field name="mdp">
<field-validator type="requiredstring">
<message>Le mot de passe est obligatoire !</message>
</field-validator>
</field>
</validators>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
67 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
68 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Principes généraux
Tous les messages textuels doivent être dans des fichiers séparés du
code source (Java, HTML...) → Resources Bundle
Struts : plusieurs niveaux
Application
Package
Action
Fichiers *.properties : messages.properties
Internationalisation en suffixant le code pays :
francais : messages_fr.properties
anglais : messages_en.properties
italien : messages_it.properties
...
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
69 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Principes généraux
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
70 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Niveau application (messages globaux)
TP/LOCALISATION/src/java/messages.properties
titre=LOCALISATION
bienvenue=Bienvenue
page.langue=La page que vous visualisez est en francais
TP/LOCALISATION/src/java/messages_fr.properties
titre=LOCALISATION
bienvenue=Bienvenue
page.langue=La page que vous visualisez est en francais
TP/LOCALISATION/src/java/messages_en.properties
titre=LOCALIZATION
bienvenue=Welcome
page.langue=This page is in english
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
71 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Niveau package
TP/LOCALISATION/src/java/action/package.properties
action=Une action est intervenue
TP/LOCALISATION/src/java/action/package_fr.properties
action=Une action est intervenue
TP/LOCALISATION/src/java/action/package_en.properties
action=An action was intercepted
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
72 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Niveau action
TP/LOCALISATION/src/java/action/LocaleAction.properties
accueil=Vous etes sur la page d’accueil
# Formulaire de changement de langue
langue_disponible=Langues disponibles
francais=Francais
anglais=Anglais
TP/LOCALISATION/src/java/action/LocaleAction_fr.properties
...
TP/LOCALISATION/src/java/action/LocaleAction_en.properties
...
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
73 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Configuration dans Struts
Niveau application
TP/LOCALISATION/src/java/struts.xml
<struts>
<constant
name="struts.custom.i18n.resources" value="messages" />
<package name="action" extends="struts-default">
<action>
...
</action>
...
</package>
</struts>
Niveau Package : package.properties (+suffix pays)
Niveau Action : nom_classe_action.properties (+suffix pays)
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
74 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Dans une page JSP
TP/LOCALISATION/web/accueil.jsp
<s:property value="getText(’bienvenue’)" />
<s:text name="bienvenue" />
<s:text name="test-test" >
Ce message s’affiche car la cle "test-test" n’existe pas dans
les fichiers de langue
</s:text>
<s:form action="traduit" >
<s:textfield name="cle" key="cle" />
<s:submit key="submit" />
</s:form>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
75 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Dans une page action
TP/LOCALISATION/src/java/action/TraduitAction.java
public class TraduitAction extends ActionSupport {
private String cle;
private String traduction;
public String traduit() {
if (cle != null) {
String str_traduction = getText(cle);
if (!str_traduction.equalsIgnoreCase(cle)) {
this.setTraduction(str_traduction);
} else {
this.setTraduction("Cle inexistante");
}
} else {
this.setTraduction("Cle inexistante");
}
return "traduit";
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
76 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Changer de langue (1)
TP/LOCALISATION/web/accueil.jsp
<!-- Creation des liens -->
<s:url id="localeFR" action="change_langue">
<s:param name="request_locale">fr</s:param>
</s:url>
<s:url id="localeEN" action="change_langue">
<s:param name="request_locale">en</s:param>
</s:url>
<!-- Affichage des liens -->
<s:a href="%{localeFR}"><s:text name="francais" /></s:a>
<s:a href="%{localeEN}"><s:text name="anglais" /></s:a>
→ http://localhost:8080/LOCALISATION/accueil.action?request_locale=fr
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
77 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Changer de langue (2)
TP/LOCALISATION/src/java/action/LocaleAction.java
package action;
import com.opensymphony.xwork2.ActionSupport;
public class LocaleAction extends ActionSupport {
public String execute() throws Exception {
return "change";
}
}
TP/LOCALISATION/src/java/struts.xml
<action name="change_langue" method="execute"
class="action.LocaleAction" >
<result name="change">/accueil.jsp</result>
</action>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
78 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Principes Fichiers de propriétés Configuration Utilisation Exemples
Rechercher une propriété
Créer un formulaire de recherche de propriété
Créer la classe action contenant deux paramètres : la clé + la
traduction
Référencer l’action dans le fichier struts.xml
→ TP
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
79 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
80 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Disposition (layout)
→ Templates
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
81 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Le concept de template
→ Fournit l’apparence de la page
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
82 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Le framework Tiles
Système de template
Construction et chargement de pages JSP dynamiques
Supporte la réutilisation de "tile"
Supporte l’internationnalisation (I18N)
Intégration dans Struts via plugin
→ http://tiles.apache.org
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
83 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Configuration de Struts -> Tiles
TP/LAYOUT/web/WEB-INF/web.xml
<context-param>
<param-name>tilesDefinitions</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<listener>
<listener-class>
org.apache.struts2.tiles.StrutsTilesListener
</listener-class>
</listener>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
84 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Configuration des Layout
TP/LAYOUT/web/WEB-INF/tiles.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="baseLayout" template="/layout/base.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/templates/header.jsp" />
<put-attribute name="menu" value="/templates/menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/templates/footer.jsp" />
</definition>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
85 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Configuration (2)
TP/LAYOUT/web/WEB-INF/tiles.xml
<definition name="accueil" extends="baseLayout">
<put-attribute name="title" value="Accueil" />
<put-attribute name="body" value="/pages/accueil.jsp" />
</definition>
<definition name="about" extends="baseLayout">
<put-attribute name="title" value="A propos de..." />
<put-attribute name="body" value="/pages/about.jsp" />
</definition>
<definition name="contact" extends="baseLayout">
<put-attribute name="title" value="Contact" />
<put-attribute name="body" value="/pages/contact.jsp" />
</definition>
</tiles-definitions>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
86 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Layout de base
TP/LAYOUT/web/layout/base.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:insertAttribute name="title" ignore="true" /></title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="2" align="center" width="100%">
<tr>
<td height="30" colspan="2"><tiles:insertAttribute name="header" /></td>
</tr>
<tr>
<td width="250"><tiles:insertAttribute name="menu" /></td>
<td><tiles:insertAttribute name="body" /></td>
</tr>
<tr>
<td height="30" colspan="2"><tiles:insertAttribute name="footer" /></td>
</tr>
</table>
</body>
</html>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
87 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Layouts (1)
TP/LAYOUT/web/templates/header.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<h2 align="center">Header</h2>
TP/LAYOUT/web/templates/body.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
Body
TP/LAYOUT/web/templates/footer.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<div align="center">Footer</div>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
88 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Layouts (2)
TP/LAYOUT/web/templates/menu.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<ul>
<li><a href="<s:url action="accueil"/>">Accueil</a></li>
<li><a href="<s:url action="about"/>">A propos de...</a></li>
<li><a href="<s:url action="contact"/>">Contact</a></li>
</ul>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
89 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Exemple d’arborescence
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
90 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Configuration dans Struts
TP/LAYOUT/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="accueil" method="accueil" class="action.TilesAction">
<result name="accueil" type="tiles">accueil</result>
</action>
<action name="contact" method="contact" class="action.TilesAction">
<result name="contact" type="tiles">contact</result>
</action>
<action name="about" method="about" class="action.TilesAction">
<result name="about" type="tiles">about</result>
</action>
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
91 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Disposition Configuration Templates Struts Actions
Configuration des actions
TP/LAYOUT/src/java/action/TilesAction.java
package action;
import com.opensymphony.xwork2.ActionSupport;
public class TilesAction extends ActionSupport {
public String accueil() {
return "accueil";
}
public String about() {
return "about";
}
public String contact() {
return "contact";
}
}
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
92 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Intérêts Configuration Utilisation
Sommaire
1
Modèle Vue Contrôleur
2
Le framework STRUTS
3
Exemple
4
Librairies de tags
5
Validation des données
6
Localisation et internationalisation
7
Layout
8
Intégration de Spring
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
93 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Intérêts Configuration Utilisation
Intérêts d’intégrer Spring dans Struts
Utiliser l’IOC
Intégrer les différentes couches applicatives (métier, DAO)
Configurer les données via Spring (pas dans le code Java)
→ utiliser struts2-spring-plugin
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
94 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Intérêts Configuration Utilisation
Configuration du descripteur de déploiement
TP/SPRING/web/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-cl
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
95 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Intérêts Configuration Utilisation
Configuration de Spring
TP/SPRING/src/java/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="helloClass" class="action.Hello" />
</beans>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
96 / 97
MVC
STRUTS
Exemple
Taglib
Validation
Localisation
Layout
Spring
Intérêts Configuration Utilisation
Configuration de Struts
TP/SPRING/src/java/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="test" extends="struts-default">
<action name="hello" class="helloClass">
<result name="succes">succes.jsp</result>
<result name="erreur">erreur.jsp</result>
<result name="input">index.jsp</result>
</action>
</package>
</struts>
Michael Fortier (Université Paris 13)
STRUTS
M2I,LEE,2015-2016
97 / 97

Documents pareils