GWT Google Web Toolkit Yves Bekkers 1GWT - Yves Bekkers.

Slides:



Advertisements
Présentations similaires
TOUQUET Arnaud ▪ GI05 BLONDEEL Igor ▪ GM05
Advertisements

A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Exposé de Système - Informatique et Réseau
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
Google Web Toolkit Introduction Didier Girard – 04 juillet 2007.
GWT, présentation générale
TP 3-4 BD21.
Formulaire HTML Introduction. Définition de formulaire.
Introduction aux Web Services Partie 1. Technologies HTML-XML
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Programmation orientée objet
Mars 2013 Grégory Petit
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
SERVLETS PRESENTATION
Développement Rapide dApplications Web avec.NET « Mon premier site »
GWT UML Un modeleur UML en GWT
GWT, présentation générale Rédigée à partir des présentations de Didier Girard Et de Anthony Dahanne Mise.
28 novembre 2012 Grégory Petit
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
.Net Remoting.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
FICHIERS : Définition : Algorithme général:
Création d'un projet Web avec Netbeans
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
PhP-MySQL Pagora 2012/2013 CTD 1 - Presentation de moi ^^
JSP (Java Server Pages)
AJAX.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
GWT - QuickStart V 1.0 / May. Mise en place de l’environnement Java : Version 1.4 minimum IDE Eclipse 3.3 Europa : lien (Eclipse J2EE recommandée)‏lien.
LES CLIENTS WEB RICHES Tuteur : Olivier CARON LEFEBVRE Benoit
Module I-C3 : Applications Web IUT R&T 2e année
PROGRAMMATION WEB FRONT-END.
JavaScript Nécessaire Web.
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
JavaScript.
0 Objectifs de la session n°1  Revenir sur toutes les bases théoriques nécessaires pour devenir un développeur Web,  Découvrir l’ensemble des langages.
 Objet window, la fenêtre du navigateur
Enterprise Java Beans 3.0 Cours INF Bases de Données Hiver 2005, groupe 10 Stefan MARTINESCU.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
GESTION DE COMPOSANTS ELECTRONIQUES
Struts.
Module : Pages Web Dynamiques (Production Électronique Avancée)
Cours MIAGE « Architectures Orientées Services »Henry Boccon-GibodCours MIAGE « Architectures Orientées Services »Henry Boccon-Gibod 1 Architectures Orientées.
Mise au point d'une interface XUL pour un concordancier (LDI)‏ Tromeur Laurent 29 octobre 2007.
Les Servlets Présentation Cycle de vie Principe de fonctionnement
Service de vidéo à la demande Projet Tutoré : Groupe C3 Université Paris 5.
Publication Flash sur Internet et Transfert avec Dreamweaver COM3562 Communication Multimédia MARS 2011.
Les Java Server Pages Dans ce chapitre, nous allons :
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
SOAP et les RPC XML SOAP WSDL RPC. Rappels sur le XML Langage avec des balises Très lisible Pour stocker des données Séparation entre contenu et présentation.
Initiation aux bases de données et à la programmation événementielle
Tuteur : Jean-Philippe Prost Soutenance de Projet Licence Professionnelle Assistant de Projet Informatique Développement d’Applications E-Business Année.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
1 Présentation de DREAMWEAVER (1) Gaël TREMEAU GI05 Printemps 2006.
DreamWeaver Séance 2 HMIDA Ahmed A2008. Plan 1.Calques 2.CSS 3.Modèles 4.Formulaires 5.Comportements 6.Mise en ligne.
FORMULAIRES FOMULAIRE Permet à l’utilisateur d’entrer des renseignements le concernant. Utilisation –Inscription sur un site –Mise à jour d’une base.
SI28 – Ecriture interactive et multimédia Sylvain Slaton – Pierre Laporte.
DREAMWEAVER SEANCE 1 Axel JACQUET GM05 – Julien VAN MOORLEGHEM GM05 A2008 Écriture interactive & multimédia Présentation Dreamweaver 8.
DREAMWEAVER MX2 - Séance 2 Les calques Les comportements Les scénarios Les formulaires Les feuilles de style Les modèles Les cadres Mise en ligne Jérôme.
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
SI28 : D REAMWEAVER 2 Audrey BUISSON – GSU05 Romain LASSALLE – GI05 1 SI28 – Ecriture interactive et multimedia.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
DWR Jean-Jacques LE COZ. Introduction Projet DWR Framework AJAX Projet Open Source commencé en 2004 Licence GPL (Apache Software License v2) Sponsorisé.
Transcription de la présentation:

GWT Google Web Toolkit Yves Bekkers 1GWT - Yves Bekkers

Présentation de GWT Outil développé par Google depuis 2006 Principe –Utilisation massive d’appels à distance asynchrones –Développement WEB orienté composants –Développer en un seul langage : Java –Lors du déploiement un compilateur traduit le code client écrit en Java vers une application WEB classique (HTML+Javascript) –Abstraction complète de la complexité liée à HTML, Javascript, CSS 2GWT - Yves Bekkers

Application WEB dynamique RIA Comme une application AJAX : pas de rechargement de page html entre les requêtes Développer une application AJAX sans écrire de code Javascript –Développement Écrire l’interface WEB en Java Débugger l’interface en Java dans un « mode hôte » –Production Déployer l’application en utilisant le compilateur croisé GWT pour générer les pages HTML et le code Javascript à partir du code Java 3GWT - Yves Bekkers

Portabilité Les applications GWT sont supportées automatiquement par tous les principaux navigateurs –IE –Mozilla Firefox –Safari –Google Chrome 4GWT - Yves Bekkers

Communication avec le serveur Deux types de communication –GWT RPC (Remote Procedure Call) À base d’une servlet coté serveur asynchrone –HTTP XML, JSON (JavaScript Object Notation) 5GWT - Yves Bekkers

Communications RPC Appel de méthodes à distance basé sur les servlet Esprit RMI –Créer une interface qui spécifie les méthodes distantes –Implémenter l’interface coté serveur Déroulement d’un appel de méthode à distance –Sérialisation des arguments –Appel de la méthode distante –Sérialisation du résultat –Le client désérialise le résultat Échange d’objets java sérialisés au dessus du protocole HTTP, asynchrone 6GWT - Yves Bekkers

Format XML 7GWT - Yves Bekkers

Format JSON {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value":"New","onclick":"CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} 8GWT - Yves Bekkers

Pourquoi GWT Pas besoin de connaitre Javascript Javacript est un faux langage à objet Typage statique de votre application –Détection de bug à la compilation On reste dans un même univers de développement : Java –Mise au point du code client en Java Support des outils de développement javascript/Ajax laisse à désirer 9GWT - Yves Bekkers

Gwt et les applets Même idée de départ –Déporter l’activité sur le client –Décharger le serveur –Limiter les échanges d’information Code plus simple avec GWT GWT offre en plus un mécanisme de RPC –Remote Procedure Call : appel de méthode à distance –Sérialisation automatique des objets échangés 10GWT - Yves Bekkers

Composants de GWT le compilateur Java vers JavaScript un navigateur spécialement modifié pour permettre l'exécution (et le débogage) de code Java natif sans nécessiter la compilation JavaScript une bibliothèque d'émulation JRE: il s'agit d'une implémentation en JavaScript d'un sous-ensemble de la bibliothèque de classes Java standard (en particulier quasiment tout le package java.lang et une partie de java.util) une bibliothèque de composants graphiques contenant des Widgets de base permettant la construction d'une interface graphiqueWidgets 11GWT - Yves Bekkers

Un outil de développement sous Eclipse Un plugin pour Eclipse 3.4 site de mise à jour – 12GWT - Yves Bekkers

Structure d’un nouveau projet sous Eclipse 13GWT - Yves Bekkers

Conventions Module sous Eclipse –Deux fichiers avec une nommage cohérant monMudule.gwt.xml le descripteur de module monModule.html la page html hôte du module –Plusieurs modules sont autorisés dans un même projet, ils ont chacun leur descripteur, point d’entrée et leur page HTML Hôte –Un module n’a qu’une page HTML hôte –Si un module a plusieurs points d’entrée ils apparaissent tous dans la même page GWT - Yves Bekkers14

Le dossier war Le dossier war, représente l’archive WAR qui sera exportée/déployée. Lors de la compilation du projet, les fichiers seront créés dans un sous- dossier de celui-là. –Le répertoire lib du WEB-INF contient les librairies GWT. Toutes les ressources (images, css, …) doivent être placées dans le répertoire war à l’instar d’une application Web classique. 15GWT - Yves Bekkers

Le dossier src On trouve deux packages –Client –Server On trouve aussi un fichier GWTDemo.gwt.xml 16GWT - Yves Bekkers

GWT en « mode hôte » – mise au point Application peut s’exécuter en mode hôte « hosted mode » –La JVM exécute le code client à l’intérieur d’une fenêtre de navigateur hôte –Mise au point facilitée Éditer le source Rafraichir Examiner les résultats Recommencer 17GWT - Yves Bekkers

GWT en « mode WEB » - déploiement Une fois testé le code en mode hôte on le compile et on le déploie sur un serveur (Tomcat d’Apache par exemple) Une application déployée est dite en « mode WEB » Une fois déployé le code client est du pur HTML+Javacript 18GWT - Yves Bekkers

Support des CSS Séparation du code et de la présentation Code Java Public ListWidget(String Item) { … setStyleName("gwt-ListWidget"); } Fichier CSS.gwt-ListWidget { background-color:black; color:red; } 19GWT - Yves Bekkers

Interface graphique 20GWT - Yves Bekkers

Composants graphiques (Widgets) disponibles Des composants graphiques classiques –Panneaux –Boutons –Cases à cocher –Tables / Grilles –Boîtes de dialogues –Primitive HTML (dont les images et les hyperliens) –Menus et barres de menus –Fenêtres défilantes –Onglets –Arbres Plusieurs composants non disponibles dans GWT ont été implémentées dans des librairies tierces, comme Ext GWT, GWT Component Library, GWT-Ext,GWT Widget Library,GWTiger,Rocket GWT,dojo etc.GWT Component Library 21GWT - Yves Bekkers

Un exemple : le compteur 22GWT - Yves Bekkers

Structure de l’interface VerticalPanel HorizontalPanel Button LabelTextBox 23GWT - Yves Bekkers

Structure de l’application sous Eclipse 24GWT - Yves Bekkers

Notion de module Un module est un ensemble de services cohérents réutilisables Toute application est incluse dans un module Un module comporte –Un nom de module –Un descripteur de module (document Monmodule.gwt.xml ) –Une page HTML hôte –Un éventuel point d’entrée 25GWT - Yves Bekkers

Nom du document descripteur Sous Eclipse par défaut si le projet s’appelle monProjet le descripteur s’appelle MonProjet.gwt.xml Le nom du document descripteur peut être changé GWT - Yves Bekkers26

Le document Compteur.gwt.xml À placer dans le répertoire src/fr/ifsic/gwt/compteur Déclaration du point d’entrée du module 27GWT - Yves Bekkers

Nom d’un module Sous Eclipse si un projet s’appelle monProjet que le module se trouve dans la paquetage fr.ifsic.test le module s’appelle par défaut fr.ifsic.test.MonProjet On peut renommer un module dans le fichier de configuration MonProjet.gwt.xml grâce à l’attribut rename-to de l’élément GWT - Yves Bekkers28

La page html hôte Compteur <script type="text/javascript" language="javascript" src="compteur/compteur.nocache.js"> Compteur L’élément peut être totalement vide 29GWT - Yves Bekkers

La classe Compteur public class Compteur implements EntryPoint { public void onModuleLoad() { … } … } Point d’entrée du module : la méthode onModuleLoad –Remplace la méthode main d’une application java 30GWT - Yves Bekkers

Structure de l’interface mainPanel bouttonPanelvisuPanel addButtonzeroButtonsubButtonvisuCompteurTextBoxlabel 31GWT - Yves Bekkers

Déclaration des composants de l’interface VerticalPanel mainPanel = new VerticalPanel(); HorizontalPanel visuPanel = new HorizontalPanel(); HorizontalPanel buttonPanel = new HorizontalPanel(); TextBox visuCompteurTextBox = new TextBox(); Button addButton = new Button("+1"); Button zeroButton = new Button("0"); Button subButton = new Button("-1"); Label label = new Label("Compteur"); Composants de la librairie com.google.gwt.user.client.ui 32GWT - Yves Bekkers

Placement des composants de l’interface mainPanel.setHorizontalAlignment( HasHorizontalAlignment.ALIGN_CENTER); visuPanel.add(label); visuPanel.add(visuCompteurTextBox); buttonPanel.setSpacing(20); buttonPanel.add(addButton); buttonPanel.add(zeroButton); buttonPanel.add(subButton); mainPanel.add(visuPanel); mainPanel.add(buttonPanel); RootPanel.get("mainCompteur").add(mainPanel); 33GWT - Yves Bekkers

Placement dans la page HTML Dans le code Java RootPanel. get("mainCompteur").add(mainPanel); Dans la page html 34GWT - Yves Bekkers

Placement par défaut RootPanel.get().add(mainPanel); mainPanel est ajouté au composant de la page html 35GWT - Yves Bekkers

Mémorisation de la valeur du compteur Attribut cpt de la classe Compteur public class Compteur implements EntryPoint { private int cpt = 0; public void onModuleLoad() { … } … } 36GWT - Yves Bekkers

Gestion des évènements sur les boutons addButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { cpt++; refresh(); } }); Le méthode refresh() met à jour l’interface 37GWT - Yves Bekkers

Mise à jour de l’interface private void refresh() { visuCompteurTextBox.setText(""+cpt); } 38GWT - Yves Bekkers

Gestion des évènement dans la TextBox visuCompteurTextBox.addKeyPressHandler( new KeyPressHandler() { public void onKeyPress(KeyPressEvent event) { if (event.getCharCode() == KeyCodes.KEY_ENTER) { String newVal = visuCompteurTextBox.getText(); cpt=Integer.parseInt(newVal); } }); Modification du compteur lors de la réception d’un caractère retouràlaligne 39GWT - Yves Bekkers

Démonstration … 40GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Galerie des composants GWT - Yves Bekkers

Choisir une date DatePicker 51GWT - Yves Bekkers

Texte riche RichTextArea 52GWT - Yves Bekkers

Panneau décoré DecoratorPanel 53GWT - Yves Bekkers

Panneau extensible DisclosurePanel 54GWT - Yves Bekkers

Héritage - exemple du bouton GWT - Yves Bekkers55 Button getHTML setHTML FocusWidget ClickListenerCollection addClickListener Widget attached parent IUObject Size Width toString

Hiérarchie des composants 56GWT - Yves Bekkers

Fabrication d’une table FlexTable table = new FlexTable(); table.setText(0, 0, "Nom"); table.setText(1, 0, "Prénom"); table.setText(2, 0, " "); table.setWidget(0,1, new TextBox()); table.setWidget(1,1, new TextBox()); table.setWidget(2,1, new TextBox()); GWT - Yves Bekkers57

Fabrication d’un arbre 1 class Demo extends Composite { public Demo() { Tree tree = new Tree(); initWidget(tree); TreeItem outerRoot = new TreeItem("aaaa"); outerRoot.addItem("bbbb"); outerRoot.addItem("cccc"); outerRoot.addItem("dddd"); outerRoot.addItem(new CheckBox("eeee")); tree.addItem(outerRoot);... GWT - Yves Bekkers58

Fabrication d’un arbre 2... TreeItem innerRoot = new TreeItem("ffff"); innerRoot.addItem("gggg"); innerRoot.addItem("hhhh"); innerRoot.addItem(new CheckBox("iiii")); outerRoot.addItem(innerRoot); } GWT - Yves Bekkers59

Appel de méthodes à distance RPC 60GWT - Yves Bekkers

Principe de fonctionnement GWT - Yves Bekkers61 Code GWT (client) Interface asynchrone Interface synchrone Code serveur On demande un service mais on n’attend pas la réponse. Celle-ci viendra en son temps grâce à un « objet de rappel ».

Créer un service 1.Coté client, définir une interface dite synchrone qui étend RemoteService et qui liste toutes les méthodes RPC 2.Coté serveur, implémenter l’interface et étendre RemoteServiceServlet 3.Coté client, définir une interface asynchrone basée sur la première interface avec le même nombre de méthodes que la première interface 62GWT - Yves Bekkers

Interface synchrone coté client Spécification de vos services import com.google.gwt.user.client.rpc.RemoteService; public interface MyService extends RemoteService { public T myMethod(T1 p1, T2 p2, T3 p3); } 63GWT - Yves Bekkers

Implémentation coté serveur Implémentation de vos services public class MyServiceImpl extends RemoteServiceServlet implements MyService { public T myMethod(T1 p1, T2 p2, T2 p3) { // … return r; } 64GWT - Yves Bekkers

Interface asynchrone coté client Implémentation de vos services interface MyServiceAsync { public void myMethod(T1 p1, T2 p2, T2 p3, AsyncCallback callback); } 65GWT - Yves Bekkers

Appel de méthodes asynchrones Un appel de méthode asynchrone nécessite de passer un objet de rappel (callback object) L’objet de rappel est notifié lorsque l’appel asynchrone est terminé En attendant l’appelant continu son activité Remarquez que les méthodes asynchrones ont un type résultat void 66GWT - Yves Bekkers

Conventions de nommage Nom des classes et interfaces –MyService interface synchrone –MyServiceImpl implementation –MyServiceAsync interface asynchrone Chaque méthode dans l’interface synchrone doit avoir une méthode correspondante dans l’interface asynchrone avec un paramêtre extra en dernier argument de type AsyncCallbackAsyncCallback 67GWT - Yves Bekkers

Conventions de nommage - bis Méthode de l’interface synchrone public Integer[] myMethod(String s, int i) Méthode de l’interface asynchrone public void myMethod(String s, int i, AsyncCallback callback) 68GWT - Yves Bekkers

Utilisation de services Créer une instance de service MonServiceAsync monService = GWT.create(MonService.class); Appel de méthode à distance monService.maMethode(p1,p2, new AsyncCallBack () { public onFailure(Trowable t) {...} public onSuccess(T result) {...} }) GWT - Yves Bekkers69

Chemin d’accès à un service Le chemin d’accès à un service est composé de deux parties –/nomDuModule/nomDuService Le nom du service peut être défini de deux manières –Statiquement par annotation dans l’interface –Dynamiquement ServiceAsync service = GWT.create(Service.class); ServiceDefTarget test = (ServiceDefTarget) service test.setServiceEntryPoint("/module/service"); GWT - Yves Bekkers70

Chemin d’accès à un service - bis Les déclarations de path pour la servlet doivent être cohérentes –Dans le descripteur de module <servlet class= "MaServlet" path="/module/service"/> –Dans le descripteur web.xml /module/service GWT - Yves Bekkers71

Un second exemple La calculette déportée 72GWT - Yves Bekkers

Interface utilisateur Deux opérations addition et multiplication déportées sur le serveur 73GWT - Yves Bekkers

Structure de l’interface FlexTable Text v1 Text v2 Text result Textbox HorizontalPanel Button VerticalPanel HTMLLabel 74GWT - Yves Bekkers

Déclaration des composants final VerticalPanel mainPanel = new VerticalPanel(); final TextBox v1Field = new TextBox(); final TextBox v2Field = new TextBox(); final TextBox resultField = new TextBox(); final HorizontalPanel lesBoutons = new HorizontalPanel(); final FlexTable lesFields = new FlexTable(); final HTML titre = new HTML(" Calculette déportée "); final Label invit = new Label("Entrez deux nombres puis cliquez sur un des boutons"); GWT - Yves Bekkers75

Remplissage du conteneur vertical mainPanel.setSpacing(5); mainPanel.setHorizontalAlignment( HasHorizontalAlignment.ALIGN_CENTER); mainPanel.add(titre); mainPanel.add(invit); mainPanel.add(lesFields); mainPanel.add(lesBoutons); GWT - Yves Bekkers76

Remplissage de la table lesFields.setText(0,0,"V1"); lesFields.setText(1,0,"V2"); lesFields.setText(2,0,"Résultat"); lesFields.setWidget(0,1,v1Field); lesFields.setWidget(1,1,v2Field); lesFields.setWidget(2,1,resultField); resultField.setEnabled(false); GWT - Yves Bekkers77

Mise en place des boutons final Button addButton = new Button("+"); addButton.setWidth("4em"); final Button mulButton = new Button("*"); mulButton.setWidth("4em"); lesBoutons.setSpacing(10); lesBoutons.add(addButton); lesBoutons.add(mulButton); Insertion dans la page HTML RootPanel.get().add(mainPanel); GWT - Yves Bekkers78

Déclaration du serveur coté client private final CalculetteServiceAsync calculetteService = GWT.create(CalculetteService.class); GWT - Yves Bekkers79

Mise en place des objets de rappel pour l’additionneur class AddHandler implements ClickHandler { public void onClick(ClickEvent event) { sendValuesToServer(); } private void sendValuesToServer() { int nb1 = Integer.parseInt(v1Field.getText()); int nb2 = Integer.parseInt(v2Field.getText()); calculetteService.addServer(nb1, nb2, new AsyncCallback () {... }); } GWT - Yves Bekkers80

Mise en place des objets de rappel - suite new AsyncCallback () { public void onFailure(Throwable caught) { } public void onSuccess(Integer result) { resultField.setText(result.toString()); } GWT - Yves Bekkers81

Ajout des deux objets de rappel addButton.addClickHandler(new AddHandler()); mulButton.addClickHandler(new MulHandler()); GWT - Yves Bekkers82

Implementation de l’interface coté serveur public class CalculetteServiceImpl extends RemoteServiceServlet implements CalculetteService { public Integer addServer(int nb1, int nb2) { return nb1+nb2; } public Integer mulServer(int nb1, int nb2) { return nb1*nb2; } GWT - Yves Bekkers83

VALIDATION GWT - Yves Bekkers84

Verifier (1) public class MaxlengthVerifier { private int taille; public MaxlengthVerifier(int taille) { this.taille = taille; } public boolean isValid(String name) { if (name == null || name.length()==0) { return false; } return name.length() <= taille; } GWT - Yves Bekkers85

Verifier (2) private final Label errorLabel = new Label(); private static final MaxlengthVerifier verif25 = new MaxlengthVerifier(25); errorLabel.setText(""); if (!verif25.isValid(titreField.getText())) { errorLabel.setText("svp entre 1 et 25 lettres dans le titre"); return false; } GWT - Yves Bekkers86

Verifier (3) Mettre la procédure dans un répertoire shared Dans le fichier monFic.gwt.xml – GWT - Yves Bekkers87

Démonstration … 88GWT - Yves Bekkers

Notion de session On utilise les servlets qui implémentent les RPC HttpServletRequest request = this.getThreadLocalRequest(); HTTPSession session = request.getSession(); o = session.getAttribute(key) session.setAttribute(key, o); GWT - Yves Bekkers89

Conclusion GWT - Yves Bekkers90