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 présentation...

Post on 03-Apr-2015

107 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related