Struts - Concepts
Transcription
Struts - Concepts
Struts Concepts Laurent Broto IRIT/ENSEEIHT 4 avril 2011 1 / 23 Présentation Générale Contexte Les servlets sont (presque) toujours conçues de la même manière : • un aiguillage • un traitement • une redirection Problème • structure du site implicite • duplication de code Idée • une servlet générique • paramétrée par un fichier extérieur 2 / 23 Servlet 3 / 23 Architecture • Conceptuelle ◦ Struts se positionne au niveau du contrôleur ◦ fourniture d’une librairie pour la communication avec la vue ◦ mapping d’une action (soumission d’un formulaire) avec une classe ◦ mapping d’un résultat avec une vue • Technique ◦ Struts fournit une classe qui se positionne comme un Filtre 1. 2. 3. 4. 5. cette classe intercepte tous les appels en fonction d’un fichier xml, elle réalise l’aiguillage des classes Action exécutent le traitement ces classes renvoient un résultat Struts aiguille vers une vue en fonction du résultat • Avantages ◦ structure du site explicite et facilement modifiable ◦ la taglib de Struts permet l’affectation automatique des valeurs des formulaires dans les beans 4 / 23 Vue générale 5 / 23 Mise en place du Filtre 6 / 23 Les classes Action • Doivent étendre la classe ActionSupport • Ses champs sont automatiquement positionnés par le framework • La classe effectue le traitement • Elle renvoie une chaine de caractère permettant à struts d’aller chercher les vues adaptées ◦ deux chaı̂nes préféfinies : SUCCESS et ERROR • Récupération de la session HTTP : implements SessionAware puis session.put(String,String) • Pas d’injection de dépendances possibles de manière native. Utiliser l’InitialContext ou Google Guice pour les EJB3, le plugins d’intégration à Spring pour Spring. 7 / 23 Les vues • Une librairie de taglib est fournie par Struts ◦ un taglib est une macro qui remplace une fonction Java ◦ usebean ⇒ session.getAttribute • Ces taglib permettent ◦ de générer du code HTML pour l’affichage ◦ de générer du code Java pour le positionnement (la récupération) des champs de la classe Action • Ils sont liés à des thèmes ◦ les thèmes permettent de définir comment générer le code HTML pour chaque tag ◦ ils sont contenus dans le répertoire template de struts2-core.jar 8 / 23 Tags Généraux s :if, s :elseif, s :else s :iterator s :a s :property 9 / 23 démarre une structure de contrôle. test : l’expression à évaluer itère sur une Collection. value : nom de la collection crée un lien HTML <a>. href : l’adresse de la cible affiche la valeur d’un attribut. value : le nom de l’attribut à afficher Tags HTML s :form s :textfield s s s s :submit :select :radio :checkbox 10 / 23 démarre un formulaire name : le bean à positionner, label : le texte avant le champs place un bouton de soumission key : le bean à positionner, list : liste d’option key : le bean à positionner, list : liste d’option key : le bean à positionner Struts.xml • Permet de faire correspondre des actions à des classes et des résultats à des vues • Format général d’une balise action <action name="nom-action" class="action.Action" method="execute"> <result name="success">/Success.jsp</result> <result name="error">/Error.jsp</result> <result name="input">/index.jsp</result> </action> 11 / 23 Validation d’un formulaire avant soumission Struts permet de valider le formulaire avant sa soumission • appel de la méthode public void validate() de la classe action mappée au formulaire à valider • si cette méthode appelle une méthode addFieldError, la méthode execute n’est pas appelée et un message d’erreur est affiché dans l’Action définie dans le nœud input du fichier struts.xml • tag <s:head> pour de la coloration dans la jsp cible de l’erreur 12 / 23 Exemple d’application Struts : la calculatrice On va réécrire l’application de calculatrice vue en TP. L’application sera composée : • d’un formulaire avec des tags Struts pour que l’utilisateur saisisse les opérandes • d’une JSP avec des tags Struts pour afficher le résultat • d’une classe action qui fera l’addition et la validation du formulaire • du fichier struts.xml correctement paramétré 13 / 23 Formulaire de saisie 14 / 23 Formulaire de saisie (suite) URL : .../index.action 15 / 23 Classe ActionCalc package h e l l o s t r u t s ; i m p o r t com . opensymphony . xwork2 . A c t i o n S u p p o r t ; p u b l i c c l a s s ActionCalc extends ActionSupport { p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ; p r i v a t e S t r i n g nb1 , nb2 ; p r i v a t e i n t sum ; public void v a l i d a t e () { try { I n t e g e r . p a r s e I n t ( nb1 ) ; } catch ( Exception e ) { a d d F i e l d E r r o r ( ” nb1 ” , ” E n t r e z un nombre ” ) ; } try { I n t e g e r . p a r s e I n t ( nb2 ) ; } 16 / 23 Classe ActionCalc (suite) catch ( Exception e ) { a d d F i e l d E r r o r ( ” nb2 ” , ” E n t r e z un nombre ” ) ; } } public String execute () { sum=I n t e g e r . p a r s e I n t ( nb1)+ I n t e g e r . p a r s e I n t ( nb2 ) ; r e t u r n SUCCESS ; } p u b l i c S t r i n g getNb1 ( ) { r e t u r n nb1 ; } p u b l i c v o i d s e t N b 1 ( S t r i n g nb1 ) { t h i s . nb1 = nb1 ; } 17 / 23 Classe ActionCalc (suite) p u b l i c S t r i n g getNb2 ( ) { r e t u r n nb2 ; } p u b l i c v o i d s e t N b 2 ( S t r i n g nb2 ) { t h i s . nb2 = nb2 ; } p u b l i c i n t getSum ( ) { r e t u r n sum ; } p u b l i c v o i d setSum ( i n t sum ) { t h i s . sum = sum ; } } 18 / 23 JSP de résultat 19 / 23 Formulaire de saisie (suite) URL : .../calcule.action 20 / 23 Paramétrage de la Servlet Struts Fichier struts.xml dans le répertoire src 21 / 23 Formulaire de saisie (erreur) URL : .../calcule.action 22 / 23 Conclusion • Flot d’exécution contrôlé par un fichier XML. Le flot de code est donc explicite et peut être géré par des outils • Assignation automatique des attributs dans les actions : plus besoin de récupérer les paramètres : moins code dupliqué • Grâce aux thèmes, le framework est extensible et facilement réutilisable • Prise en charge de l’Ajax • plugins disponibles pour intégration dans d’autres framework tels que Spring, . . . 23 / 23