Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Prochain SlideShare
jQuery
jQuery
Chargement dans…3
×

Consultez-les par la suite

1 sur 15 Publicité

Plus De Contenu Connexe

Diaporamas pour vous (18)

Publicité

Similaire à Tapestry (20)

Publicité

Tapestry

  1. 1. <18/01/2010> info@lorrainejug.org | http://blog.lorrainejug.org 1 Tapestry 5 Loïc Gangloff loic.gangloff@atosorigin.com
  2. 2. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 2 Plan  Qu’est ce que Tapestry ?  Architecture d’un projet Tapestry  Pages et composants  Tapestry Markup Language (Templates)  Les composants de base  Les annotations  Les évènements  Internationalisation
  3. 3. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 3 Tapestry ?  Qu’est ce que c’est ?  Framework web reposant sur les servlets  Fonctionne sur n’importe quel conteneur de servlets  Encore un autre framework web ?  Véritablement orienté objet  Pattern Convention over Configuration  Orienté composants  Rechargement à chaud  …
  4. 4. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 4 Architecture  Maven, bien évidemment… mvn archetype:create -DarchetypeGroupId=org.apache.tapestry -DarchetypeArtifactId=quickstart -DgroupId=org.apache.tapestry -DartifactId=lorrainejug -DpackageName=org.lorrainejug.tapestry5 Classe Java Template (x)html Package des pages: org.lorrainejug.tapestry5.pages Convention de nommage: Nom identique des templates et des classes
  5. 5. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 5 Pages et composants  Une page web est une classe Java  org.lorrainejug.tapestry5.pages.Index -> Page « Index »  org.lorrainejug.tapestry5.pages.movie.EditMovie -> Page « movie/edit » « movie/EditMovie »  Insensible à la casse (Index=index=inDeX)  Chaque page est associée à un template  Le template contient les composants utilisés par la page  Chaque composant  Un type identifiant la classe Java à instancier  Un identifiant unique, pouvant être assigné automatiquement par Tapestry  Pages != Servlets  Pas de singleton  Pool de pages géré par Tapestry  Les pages et composants sont de simple classe Java  Pas d’interface à implémenter, pas de classe à hériter  Un composant peut dériver d’un autre composant
  6. 6. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 6 Templates  Template au format XML  Extension .tml  Même nom que la classe (sensible à la casse)  À placer dans src/main/resources ou src/main/webapp  Namespace  http://tapestry.apache.org/schema/tapestry_5_0_0.xsd  Généralement, préfixe « t » <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> </html>  Expansion  Permet de « lire » une propriété de la page ou d’un bean  Format: ${proprieteDeMaPage} (insensible à la casse) <p>${message:hello}, ${user.name}</p>  Ajout de composants <t:textfield value="user.name"/> <t:pagelink page="user/edit">Modifier</t:pagelink>
  7. 7. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 7 Templates  Créer des layouts  <t:body/>  t:type sur balise html <html xmlns:t="http://tapestry.apache.org/schem a/tapestry_5_0_0.xsd"> <head> <title>LorraineJUG: Vidéothèque avec Tapestry !</title> </head> <body> <div id="banner"></div> <div id="body"> <t:body/> </div> <div id="footer"></div> </body> </html> <html t:type="layout" xmlns:t="http://tapestry.apache.org/schema/tap estry_5_0_0.xsd"> <h1>Index</h1> </html> <html t:type="layout" xmlns:t="http://tapestry.apache.org/schema/tap estry_5_0_0.xsd"> <h1>Edition d'un film</h1> </html> <html t:type="layout" xmlns:t="http://tapestry.apache.org/schema/tap estry_5_0_0.xsd"> <h1>Ajout d'un film</h1> </html> Index.tml EditMovie.tml CreateMovie.tml Layout.tml
  8. 8. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 8 Composants inclus Liens Description ActionLink Déclenche un évènement « Action » sur le composant EventLink Déclenche un évènement PageLink Lien vers une autre page Composant de contrôle Description If Affiche son contenu si la condition est respectée Loop Affiche son contenu en bouclant sur une « collection » Output Affiche une donnée au format définit dans un Formatter
  9. 9. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 9 Composants inclus Formulaire Description Checkbox Case à cocher DateField Champ de saisie d’une date avec calendrier TextField Champ de saisie simple PasswordField Champ de saisie de type password TextArea Champ de saisie multi-ligne Select Liste déroulante Radio Bouton « radio » Label Libellé associé à un champ formulaire Form Conteneur des champs du formulaire Submit Bouton permettant de soumettre un formulaire LinkSubmit Lien javascript permettant de soumettre un formulaire Errors Affiche les erreurs de validation du formulaire
  10. 10. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 10 Composants inclus Composant avancé Description BeanDisplay Affiche toutes les propriétés d’un JavaBean BeanEditor Crée une interface permettant d’éditer les propriétés d’un JavaBean BeanEditorForm Associe un BeanEditor avec un composant Form Grid Tableau affichant une collection de JavaBean, avec tri et pagination
  11. 11. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 11 Les annotations Attribut Description @InjectPage Injecte une page dans un composant @Persist Permet de sauvegarder des valeurs entre différentes requêtes (stocker en session) @Property Tapestry génèrera les getters et setters associés Classe Description @IncludeJavaScriptLibrary Ajouter un ou plusieurs script au composant @IncludeStylesheet Ajouter un ou plusieurs css au composant Méthode Description @Log Tapestry loguera le début et la fin de la méthode @OnEvent Définir une méthode pour qu’elle intercepte un évènement @CommitAfter « Commiter » la transaction Hibernate après l’exécution de la méthode
  12. 12. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 12 Les évènements  Convention de nommage  Nom de méthode: onEventNameFromComponentId  Annotation @OnEvent @OnEvent(EventConstants.SUCCESS) void updateMovie(){} @OnEvent(component="delete") void deleteMovie(int id){} Template Classe Java <t:form t:id=“editForm"> <!-- Champs de saisies --> <input t:type="submit"/> </t:form> Pas de t:id ? -> void onSuccess(){…} Sinon -> void onSuccessFromEditForm(){…} <t:actionlink t:id="delete" t:context=“movie.id"> Supprimer </t:actionlink> void onActionFromDelete(int id){…}
  13. 13. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 13 Les évènements  Valeur de retour de la méthode  Permet de définir la navigation entre les pages Type Description void Réaffiche la page courante String Nom de la page à afficher Class Classe de la page à afficher Object L’instance d’une page à afficher (@InjectPage) StreamResponse Flux d’octets envoyé au client URL Url externe
  14. 14. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 14 Internationalisation  Détermination de la langue en fonction du client  Ficher properties portant le même nom que le template  Préfixé éventuellement par la langue  Chaque composant peut avoir son propre catalogue de message  App.properties pour les messages de l’application  Expansion: ${message:nomdelacle} <p>${message:hello}, ${user.name}</p>  Récupérer le catalogue de message dans la page: @Inject
  15. 15. <18/01/01> info@lorrainejug.org | http://blog.lorrainejug.org 15 Exemple  Mini Vidéothèque  Couplé à Hibernate (hsqldb)  Utilisation des composants de haut niveau  Rechargement à chaud  Internationalisation Et ça fonctionne !

×