Upload
internet
View
107
Download
3
Embed Size (px)
Citation preview
Présentation d’Apache Wicket – 14/04/2008 1
T O G E T H E RT A L E N T E D
Unissons nos Talents
T O G E T H E RT A L E N T E D
Apache Wicket : Application Web simplement avec JavaNicolas Giard
Présentation d’Apache Wicket – 14/04/2008 2
Agenda
Qu’est ce que Wicket ?
Concepts Fondamentaux
Développer un Composant Personnalisé
Q&R
Présentation d’Apache Wicket – 14/04/2008 3
Wicket en bref
Open Source (Apache Sofware Foundation)
Orienté Composant
Pure Java + Pure xHTML
Simple
Communauté enthousiaste
Présentation d’Apache Wicket – 14/04/2008 4
Qu’est ce que Wicket
La technologie : Orienté Composant, manipulation ‘Programmatique’ des balises
La mission : Apporter le développement objet à la couche présentation d’une application Web
La récompense : S’amuser dans son travail et être de nouveau bons amis avec son manager
Présentation d’Apache Wicket – 14/04/2008 5
Les réponses de Wicket
Faire simplement des choses simples.
Utiliser un modèle de Composant Orienté Objet où les composants sont réellement autonomes.
Réappliquer le pattern Modele-Vue-Controleur sur les composants plutôt que sur les requètes, avec les modèles comme point d’entrée.
Avoir une séparation de contenu propre entre HTML et Java.
Proposer une gestion d’état transparente et complètement automatisée.
Réduire au minimum les besoins de configuration.
Plus d’XML!
Rendre la création et l’utilisation de composants personnalisés plus simple que n’importe quel autre framework.
Présentation d’Apache Wicket – 14/04/2008 6
Composant vs ‘Traditionnel’
Traditionnel Struts, WebWork, Spring MVC, etc. Eprouvé sur le web Beaucoup de développeurs Web disponibles
Composants JSF, Wicket, Tapestry, etc. Modèle traditionnel pour le développement d'UI sur les clients lourds Beaucoup de développeurs disponibles
Présentation d’Apache Wicket – 14/04/2008 7
Caractéristiques
Composition des Pages Panels, Borders et héritage de balise
Support excellent de la localisation et des styles Chargement de template et de resource (_fr.html, .xml) Model localisé (e.g. pour les labels) Chargement sophistiqué des ressources (par composition & héritage) Détection automatique des possibilités du client Mécanisme de conversion
Intégration Spring Guice Hibernate JasperReports OSGi
Composants fantaisistes ‘triable’, ‘filtrable’, ‘paginable’, tableau orienté données date picker, editeur de texte, Google Maps Panneaux à Onglets, navigation, arbre, wizard
Présentation d’Apache Wicket – 14/04/2008 8
Caractéristiques
Gestion de l’état Sessions à type sûr
Support du clustering
Support du bouton ‘précédent’
Double stratégies de ‘submit’ render redirect / redirect to buffered response / none
Support des Test Unitaires Tests basés sur JUnit
Rapports d’erreur et gestion des logs étendus
Support natif d’Ajax Ajax sans écrire de JavaScript, Dojo, Scriptaculous, ...
Contribution à l’en-tête HTML Javascript & CSS
‘Mounting’ d’URL URL intelligible
Sécurité au niveau du Composant
Présentation d’Apache Wicket – 14/04/2008 9
Agenda
Qu’est ce que Wicket ?
Concepts Fondamentaux
Développer un Composant Personnalisé
Q&R
Présentation d’Apache Wicket – 14/04/2008 10
Concepts de Wicket
Application
Session
RequestCycle
Composants
Behaviors
Models
Présentation d’Apache Wicket – 14/04/2008 11
Application
Point d’entrée principal de votre application web
Configuration Afficher les tags spécifiques Wicket? Vérifier les changements dans le html tout les …? Définir la page d’accueil
Factories pour Session RequestCycle Security …
Configurée dans le web.xml :<filter>
<filter-name>wicket</servlet-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>example.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</filter>
Présentation d’Apache Wicket – 14/04/2008 12
Concepts de Wicket
Application
Session
RequestCycle
Composants
Behaviors
Models
Présentation d’Apache Wicket – 14/04/2008 13
Session
Abstraction d’une session utilisateur
Typiquement stockée dans HttpSession
Conserve les données spécifiques à la Session Locale, infos du Client (browser, vendor, version) Vos propres données?
Utilisateur authentifié
Contenu d’un panier pour un site de commerce Historique limité des pages pour le support du bouton Précédent
Présentation d’Apache Wicket – 14/04/2008 14
Session
public class MySession extends WebSession {
private ShoppingCart cart;
public ShoppingCart getCart() { … }
public void setCart(ShoppingCart cart) { … }
}
…
mysession.setCart(new ShoppingCart());
…
ShoppingCart cart = mysession.getCart();
cart.add(quantity, selectedProduct);
Présentation d’Apache Wicket – 14/04/2008 15
Concepts de Wicket
Application
Session
RequestCycle
Composants
Behaviors
Models
Présentation d’Apache Wicket – 14/04/2008 16
RequestCycle
Etapes du “Request Cycle”:
1. Création de l’objet request cycle
2. Décodage de la requète
3. Identification des ‘cibles’ de la requète (page, component, …)
4. Exécution des événements (onClick, onSubmit, …)
5. Réponse (page, component, image, pdf, …)
6. Nettoyage
Présentation d’Apache Wicket – 14/04/2008 17
RequestCycle
Deux types de requètes: Stateful
Liée à une session d'utilisateur spécifique
Pas ‘bookmarkable’
Stateless Pas nécessairement liée à une session d’utilisateur spécifique
‘Bookmarkable’
Présentation d’Apache Wicket – 14/04/2008 18
Concepts de Wicket
Application
Session
RequestCycle
Composants
Behaviors
Models
Présentation d’Apache Wicket – 14/04/2008 19
Composants
Encapsule la manipulation des balises
Peut recevoir des événements onClick, onSubmit
Sait lui même comment et où il doit s’afficher
Créer un Composant personnalisé est aussi simple que d’écrire ‘extends’
L’héritage de wicket.Component fait le reste
Disponible dans le classpath de l’application
Présentation d’Apache Wicket – 14/04/2008 20
Composants
Classe mère Ultime : org.apache.wicket.Component
• Label• MultiLineLabel• TextField• PasswordTextField• Image• Link• Tree• BookmarkablePageLink• JasperReports
• ListView• Loop• PagingNavigator• ImageMap• Button• Ajax…• Sorting, Paging, Repeaters• Wizard• DatePicker
Présentation d’Apache Wicket – 14/04/2008 21
Composants et balises
Un composant est identifié dans le balisage par wicket:id
Html: <h1 wicket:id=“msg”>Gets replaced</h1>
Java:new Label(“msg”, “Hello, World!”);
Final (les tags wicket peuvent être masqués du source html):<h1>Hello, World!</h1>
Présentation d’Apache Wicket – 14/04/2008 22
Composants et balises
Un composant peut avoir son propre fichier html: Page Panel Border
Mettre les fichiers Java, HTML et ressources dans le même package
Présentation d’Apache Wicket – 14/04/2008 23
Example : Hello, World!
Présentation d’Apache Wicket – 14/04/2008 24
Concepts de Wicket
Application
Session
RequestCycle
Composants
Behaviors
Models
Présentation d’Apache Wicket – 14/04/2008 25
Behaviors
Les Behaviors sont des ‘plug-ins’ pour les Composants
Ils peuvent modifier les balises HTML des Composants
item.add(new AbstractBehavior() {public void onComponentTag(Component component, ComponentTag tag) {
String css = (((Item)component).getIndex() % 2 == 0) ? "even" : "odd";tag.put("class", css);
}});
Output:<tr class=“odd”>…</tr><tr class=“even”>…</tr>
Présentation d’Apache Wicket – 14/04/2008 26
Behaviors
Modifier les attributs des balises du Composant
Ajouter des évenements javascript
Ajouter un ‘comportement Ajax’
component.add(new AjaxSelfUpdatingBehavior(Duration.seconds(1)));
Présentation d’Apache Wicket – 14/04/2008 27
Concepts de Wicket
Application
Session
RequestCycle
Composants
Behaviors
Models
Présentation d’Apache Wicket – 14/04/2008 28
Models
Les Models associent vos POJO’s aux composants Wicket
Label(“nom”, model)
<<Personne>>
+nom : String+ville : String
PropertyModel
Présentation d’Apache Wicket – 14/04/2008 29
Models
Le binding en Java n’est pas aisé Ne fera pas d’update:
new TextField(“txt”, personne.getNom()) Provoquera une NullPointerException:
new Label(“rue”, personne.getAdresse().getRue())
Solution: les expressions type OGNL/EL
PropertyModel: new PropertyModel(personne, “nom”) new PropertyModel(personne, “adresse.rue”)
Prévenir le NullPointer à l’update:Personne p = new Personne();new TextField(“rue”, new PropertyModel(p, “adresse.rue”));
Présentation d’Apache Wicket – 14/04/2008 30
Agenda
Qu’est ce que Wicket ?
Concepts Fondamentaux
Développer un Composant Personnalisé
Q&R
Présentation d’Apache Wicket – 14/04/2008 31
Pourquoi un composant personnalisé?
Eelco Hillenius:
« Imagine being told that you can use Java as your programming language, but at the same time being told not to create your own classes. [...]
I fail to understand why that has to be different for UI development, and Wicket proves it doesn't have to be so. »
Présentation d’Apache Wicket – 14/04/2008 32
Combien de temps pour un composant ?
464 pages …
20 minutes et encore…
Présentation d’Apache Wicket – 14/04/2008 33
Example: Password strength
weak
medium
strong
Présentation d’Apache Wicket – 14/04/2008 34
Example: Password strength
Les Panels permettent le regroupement Ils ont leur propre ficher html Peuvent être échangé dans les pages par d’autres composants Peuvent contribuer au header de la page html Peuvent contenir autant de composants que souhaité, même d’autres panels
Présentation d’Apache Wicket – 14/04/2008 35
Example: Password strength
Présentation d’Apache Wicket – 14/04/2008 36
Example: Password strength
Présentation d’Apache Wicket – 14/04/2008 37
Example: Password strength
Présentation d’Apache Wicket – 14/04/2008 38
Les Composants sont reutilisables
Mettre le tout dans un JAR
Packager toutes les ressources nécessaires: HTML, JavaScript, Images, CSS class file
Mettre le JAR dans le classpath
Prêt à être (re)utilisé
Présentation d’Apache Wicket – 14/04/2008 39
Agenda
Qu’est ce que Wicket ?
Concepts Fondamentaux
Développer un Composant Personnalisé
Q&R