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