introduction à gwt

42
[Elaborer par Chabbeh Jihed ([email protected]) ] Introduction à GWT Page 1

Upload: jihed-desastre

Post on 24-Jul-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Introduction à GWT

Page 1

Page 2: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Table de matières1 Rappel...............................................................................................................................................4

1.1 Internet et Web........................................................................................................................4

1.2 Html (Hyper Text Markup Language)......................................................................................4

1.3 Script.........................................................................................................................................4

1.4 Java...........................................................................................................................................4

1.5 JavaScript..................................................................................................................................4

1.6 XML.........................................................................................................................................4

1.7 Ajax (Asynchronous JavaScript and XML).............................................................................4

2 C’est quoi le GWT............................................................................................................................5

3 A quoi sert le GWT..........................................................................................................................5

4 Les Avantages...................................................................................................................................5

5 Mise en place de GWT.....................................................................................................................5

5.1 Environnement de développement...........................................................................................5

5.2 Plate-forme et IDE choisi.........................................................................................................5

5.3 Installation d’Eclipse................................................................................................................6

5.4 Installation du GWT.................................................................................................................7

6 Anatomie d’un projet GWT..............................................................................................................8

6.1 Les packages et la structure des dossiers..................................................................................8

6.2 La page HTML hôte.................................................................................................................8

6.3 Le point d’entrée.......................................................................................................................8

6.4 Le fichier Module.....................................................................................................................9

7 Les widgets et Les Handlers.............................................................................................................9

7.1 Les étapes de création d’un projet GWT..................................................................................9

7.2 Les widgets.............................................................................................................................13

7.2.1 Exemples........................................................................................................................13

7.3 Les Handlers...........................................................................................................................15

7.4 Exemples de Widgets et Handlers..........................................................................................17

7.4.1 Label...............................................................................................................................17

Page 2

Page 3: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

7.4.2 Button.............................................................................................................................18

7.4.3 RadioButton....................................................................................................................18

7.4.4 CheckBox.......................................................................................................................19

7.4.5 ToggleButton..................................................................................................................20

7.4.6 TextBox..........................................................................................................................20

7.4.7 DatePicker (calendrier)...................................................................................................21

7.4.8 ListBox...........................................................................................................................22

7.4.9 DialogBox.......................................................................................................................23

7.4.10 Image..............................................................................................................................24

7.5 Conclusion..............................................................................................................................24

8 Hello GWT.....................................................................................................................................24

9 Conclusion générale.......................................................................................................................33

10 Bibliographie..............................................................................................................................33

Page 3

Page 4: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

1 Rappel

1.1 Internet et Web

Il ne faut jamais faire confondre internet au web car chacun a sa propre notion.

*Internet est un assemblage de multiples réseaux, tous connectés entre eux. (Le réseau des réseaux)

*Le web est donc un système de fichiers que toute personne possédant un ordinateur (ou bien un

Téléphone) connecté à Internet peut consulter.

1.2 Html (Hyper Text Markup Language)

Langage basic de description de pages Web. Utilisé par les navigateurs web pour lire des

documents visuels et audibles.

1.3 Script

Le script permet de lancer et coordonner l’exécution d’un programme.

1.4 Java

C’est un langage de programmation informatique orienté objet.

1.5 JavaScript

Le JavaScript n’est pas Java, en effet, c’est Langage de script utilisé pour fournir des

fonctionnalités interactives aux pages Web (validation de formulaires, communication avec le

serveur,…) utilisé côté client, comme côté serveur.

1.6 XML

C’est un langage de balisage extensible qui permet de faciliter l’échange des données

complexes entres les systèmes d’informations hétérogènes.

1.7 Ajax (Asynchronous JavaScript and XML)

Une manière de construire des applications web en se basant sur diverses technologies comme

JavaScript, XML, DOM, XMLHTTPRequest et permet d’échanger avec le serveur et de mettre à jour

une ou plusieurs parties d’une page web sans recharger toute la page.

Page 4

Page 5: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

2 C’est quoi le GWT

C’est un ensemble d’outils logiciels qui utilise le langage java développé par Google qui permet

de créer des applications web dynamiques en utilisant le JavaScript. Il permet aussi de créer des

applications web en Ajax.

3 A quoi sert le GWT

Il permet de développer des applications web purement en JavaScript en utilisant des Widgets

communs tels que les zones de textes, les boutons radio, etc, afin d’accélérer le développement web.

En effet, il permet d’éviter la gestion des différences entre les navigateurs.

4 Les Avantages

Les principaux avantages de GWT sont :

Logiciel libre (Open source)

Optimise le script

Utilisation facile (programmation java)

Assure le fonctionnement de l’application avec tous les navigateurs

5 Mise en place de GWT

5.1 Environnement de développement

Une des caractéristiques de GWT c’est qu’il n’impose aucun outil spécifique au développeur,

puisque le développement se fait en java. Quelque soit votre IDE ; Eclipse, NetBeans ou

tout autre IDE, le développement avec GWT ne se différencie que très peu du

développement d’une

application Java classique. On écrit du code Java, on le compile ( l’IDE s’en charge

automatiquement),

on l’exécute et on le débogue directement comme n’importe quel code Java. La

conversion en JavaScript

n’est nécessaire que pour le déploiement de l’application.

Page 5

Page 6: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

5.2 Plate-forme et IDE choisi

Le GWT est publié par Google dans trois plates-formes variantes :

• Windows (2000 ou ultérieure) ;

• Mac OS (versions 10.4 ou ultérieure) ;

• Linux (x86, nécessite GTK+ version 2.2.1 ou ultérieure).

Afin d’illustrer les exemples et introduire les différentes fonctionnalités de GWT, nous avons opté

pour Eclipse 3.6 (‘’Hélios’’) sur Windows 7, noter bien qu’il faut avoir le jdk(Java Developpment Kit)

installer au préalable sur votre machine.

Voici un lien pour télécharger la version convenable pour vous

« http://www.oracle.com/technetwork/java/javase/downloads/index.html »

5.3 Installation d’Eclipse

Eclipse existe en plusieurs versions selon le type de développement qu’on souhaite faire.

La distribution qui nous intéresse doit au minimum intégrer le développement web « JEE » qui inclut

entre autres tous les outils web.

Cette version peut se télécharger depuis la page :

http://www.eclipse.org/downloads/packages/release/Hélios

Il n’existe pas d’installeur pour Eclipse (dans les versions standard) ; le téléchargement consiste

simplement en un fichier ZIP qui contient un unique dossier « eclipse » qu’il suffit de l’extraire à un

endroit de votre choix. Le dossier « eclipse » que vous venez d’extraire contient l’application elle-

même, qui s’appelle « eclipse.exe ».

Page 6

Page 7: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

5.4 Installation du GWT

Le plugin GWT pour Eclipse de Google se trouve à l’adresse suivante :

« http://code.google.com/eclipse/ »

Si votre machine de développement est connectée à l’Internet, il est préférable d’utiliser le

gestionnaire de téléchargements intégré à Eclipse pour installer ce plugin.

1. Démarrez Eclipse

2. Sélectionnez le menu « Help/Install New Software... »

3. Cliquez sur le bouton  « Add... »

4. Entrez l’URL du plugin : «  http://dl.google.com/eclipse/plugin/3.6 »

et validez avec « OK. »

5. Cliquer sur le bouton « Select All …»

Page 7

Page 8: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

6. Validez avec «Next ».

7. Acceptez la licence qui vous est proposée.

8. Laissez le téléchargement et l’installation se dérouler. S’il vous est proposé de

redémarrer Eclipse pour prendre en compte les nouvelles fonctionnalités, il est

préférable d’accepter.

9. Vous devriez maintenant avoir des icônes supplémentaires dans Eclipse

6 Anatomie d’un projet GWT

6.1 Les packages et la structure des dossiers

La structure d’un projet GWT contient une partie constituée des fichiers et les pages statiques

ainsi que le code Java compilé, la deuxième partie contient le code GWT qui doit être transformé en

JavaScript par le compilateur GWT.

Dans notre package principal, le code GWT doit se trouver, par convention, dans un sous package

nommé « client ». Par exemple, si le package principal de l’application est « tel.stage.intro », le code

GWT doit se trouver dans le package « tel.stage.intro.client »

Les ressources, ainsi que le code Java se trouvent sous un dossier src.

Les fichiers et pages statiques (HTML, JSP, ...) se placent dans un dossier war,

Dans ce dossier war, on trouve également un sous-dossier WEB-INF qui contient un certain nombre

de

Page 8

Page 9: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

ressources nécessaires au bon déploiement :

– le fichier web.xml permettant de configurer l’application et les éventuels servlets.

– le sous-dossier lib contenant les bibliothèques Java utilisées (fichiers .JAR).

– le sous-dossier classes contenant les classes Java compilées et les ressources.

6.2 La page HTML hôte

Le code GWT, une fois il est écrit, il est destiné à tourner à l’intérieur d’une page web sous

forme de JavaScript. Par conséquent, même si l’application va occuper tout l’écran, il lui faut

une page web pour l’accueillir : c’est ce qu’on appelle la page HTML hôte (HTML host page).

6.3 Le point d’entrée

Tout comme une application Java classique, une application GWT possède un « point d’entrée».

Dans le cas d’une application Java classique, il s’agit d’une méthode public static void main(String

args[]) dans une classe quelconque, qu’on fait passer en paramètre à la commande java pour démarrer

l’application. Dans le cas de GWT, il s’agit d’une méthode public void onModuleLoad().

6.4 Le fichier Module

Un module est une unité de configuration de GWT. Il comprend tout ce qui est nécessaire pour

compiler, exécuter, déployer et réutiliser le projet GWT.

Le module est défini a travers un fichier XML contenant :

La liste des classes contenant un point d’entrer à instancier.

Les modules hérités.

Le source path qui doit contenir la liste des packages qui doivent êtres convertis en

JavaScript lors de la compilation de GWT.

Le fichier de module a un suffixe .gwt.xml .

7 Les widgets et Les Handlers

7.1 Les étapes de création d’un projet GWT

On va vous présenter comment créer un nouveau projet GWT pour vous permettre de tester les

exemples qu’on va introduire.

Page 9

Page 10: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

1-Cliquer sur l’icone de GWT et choisissez New Web Application Project…

2-Donner un nom pour votre projet ainsi que le package principal de votre application (exemple :

« telecom.stage.test ») et cliquer sur Finish pour terminer l’opération.

Remarque : Pour le moment, veuillez ne modifier les autres options

3-votre Projet est enfin créer

Page 10

Page 11: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

4-modifier le fichier Intro.java (qui est votre point d’entré) d’une façon qu’il contiendrait que la

fonction onModuleLoad ()

5-Modifier le fichier Intro.html en gardant que le squelette html et les liens vers les pages

JavaScript et css.

Pour commencer, nous allons placer notre premier widget : un bouton. Un widget doit être placé dans

Un panel (un support), le panel de base (celui qui "couvre" toute votre page HTML) s'appelle

RootLayoutPanel, il est créé en utilisant la méthode statique "get". Nous allons "déposer" un bouton

dans Le RootLayoutPanel. Un bouton est objet au sens POO du terme.

package telecom.stage.test.client;

import com.google.gwt.core.client.EntryPoint;import com.google.gwt.user.client.ui.Button;import com.google.gwt.user.client.ui.RootLayoutPanel;import com.google.gwt.user.client.ui.VerticalPanel;

public class Intro implements EntryPoint {

Page 11

Page 12: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

public void onModuleLoad() {

final Button bouton =new Button();bouton.setText("Cliquer ici!!!");final VerticalPanel Panel = new VerticalPanel ();Panel.add(bouton);RootLayoutPanel.get().add(Panel);}}}

final: notre widget ne sera pas modifier en cours d’exécution, il permet d’optimiser le code(prend

moins de place mémoire)

setText: permet d’écrire un texte dans le bouton.

Panel : il existe deux types : VerticalPanel et HorizontalPanel.

Pour tester cet exemple, cliquer sur Run Run as…Web Application

Après une attente, une adresse devrait apparaître dans l'onglet "Development Mode". Cliquer sur ce

lien ou bien copier-coller cette adresse dans votre navigateur préféré. Votre navigateur devrait vous

demander d'installer un plugin supplémentaire: acceptez. (NB : vous devez être connecter à internet)

Voici ce qu’affiche le navigateur.

Page 12

Page 13: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Il est bien sûr possible de "déplacer" le VerticalPanel dans la page (pour l'instant il se trouve en haut

et à gauche). Nous avons par exemple les méthodes :

setWidgetLeftRight et setWidgetTopBottom

La méthode setWidgetLeftRight vous permet de spécifier la distance entre les bords verticaux de la

page et votre widget (notre widget sera un VerticalPanel).

La méthode setWidgetTopBottom vous permet de spécifier la distance entre les bords horizontaux

de la page et votre widget.

Si on a:

RootLayoutPanel.get().setWidgetTopBottom(monPanel,40,Unit.PCT,40,Unit.PCT);

Il est possible de choisir différents types d'unités, ici, nous utilisons "le pourcentage de la taille totale

de l'écran" (d'où le Unit.PCT).

Il existe d'autres méthodes pour placer votre Panel dans le RootLayoutPanel :

*setWidgetLeftWidth

*setWidgetTopHeight

N'hésitez pas à "balader" "Panel" sur l'écran pour vous familiariser avec tout cela.

Page 13

Page 14: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

7.2 Les widgets

En GWT, il existe beaucoup de widget disponible, citons par exemple ; les boutons, les zone de

texte, les boutons radio, les checkbox, les boite de dialogue…

7.2.1 Exemples

package telecom.stage.test.client;

import com.google.gwt.core.client.EntryPoint;import com.google.gwt.dom.client.Style.Unit;import com.google.gwt.user.client.ui.Button;import com.google.gwt.user.client.ui.HorizontalPanel;import com.google.gwt.user.client.ui.RootLayoutPanel;import com.google.gwt.user.client.ui.TextBox;

public class Intro implements EntryPoint {

public void onModuleLoad() {

final TextBox TB=new TextBox();final Button B=new Button();B.setText("Cliquer ICI!!!!!!");final HorizontalPanel HP=new HorizontalPanel();HP.add(TB);HP.add(B);RootLayoutPanel.get().add(HP);RootLayoutPanel.get().setWidgetLeftRight(HP, 5, Unit.PCT, 40,

Unit.PCT);

}}

Résultat :

Selon votre choix, vous pouvez aussi utiliser le VerticalPanel. Il existe un grand nombre de Panel en

GWT, sitons par exemple le DockPanel :

Page 14

Page 15: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Il est possible, à l’aide du DockPanel, d’intégrer un panel dans un autre.

Exemple :

package telecom.stage.test.client;

import com.google.gwt.core.client.EntryPoint;import com.google.gwt.dom.client.Style.Unit;import com.google.gwt.user.client.ui.Button;import com.google.gwt.user.client.ui.DockLayoutPanel;import com.google.gwt.user.client.ui.DockPanel;import com.google.gwt.user.client.ui.HorizontalPanel;import com.google.gwt.user.client.ui.RootLayoutPanel;import com.google.gwt.user.client.ui.TextBox;import com.google.gwt.user.client.ui.VerticalPanel;

public class Intro implements EntryPoint {

public void onModuleLoad() {

final Button w=new Button("West");final Button e=new Button("east");final Button n=new Button("north");final Button s=new Button("south");final HorizontalPanel south=new HorizontalPanel();final HorizontalPanel north=new HorizontalPanel();final VerticalPanel east=new VerticalPanel();final VerticalPanel west=new VerticalPanel();east.add(e);west.add(w);north.add(n);south.add(s);final DockLayoutPanel dp=new DockLayoutPanel(Unit.PCT);dp.addNorth(north,20);dp.addSouth(south, 60);dp.addWest(west, 20);dp.addEast(east, 80);RootLayoutPanel.get().add(dp);RootLayoutPanel.get().setWidgetTopBottom

(dp,30,Unit.PCT,5,Unit.PCT);RootLayoutPanel.get().setWidgetLeftRight

(dp,5,Unit.PCT,5,Unit.PCT);}

Page 15

Page 16: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

}

Résultat :

7.3 Les Handlers

Les handlers sont un peu l'équivalent des listeners en Java, ils servent à gérer les clics de souris

sur les boutons grâce à la méthode onClick et à la classe anonyme ClickHandler.

Exemple 1:

public void onModuleLoad() {

final Button bouton_1=new Button();bouton_1.setText("Bouton");bouton_1.addClickHandler(new ClickHandler (){public void onClick (ClickEvent event) {Window.alert("Bonjour bouton 1");}});RootLayoutPanel.get().add(bouton_1);RootLayoutPanel.get().setWidgetLeftWidth

(bouton_1,40,Unit.PCT,15,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(bouton_1,45,Unit.PCT,10,Unit.PCT);}}

Notre classe anonyme ClickHandler possède une seule méthode : onClick.

Résultat : En cas de clic sur "bouton_1", une fenêtre d'alerte s'affiche.

On peut aussi écrire une classe chargé de la gestion des handlers.

Exemple : Classe Handler

package telecom.stage.test.client;

import com.google.gwt.event.dom.client.ClickEvent;

Page 16

Page 17: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

import com.google.gwt.event.dom.client.ClickHandler;import com.google.gwt.user.client.Window;import com.sun.java.swing.plaf.windows.resources.windows;

public class Handler implements ClickHandler {

@Overridepublic void onClick(ClickEvent event) {

Window.alert("Bouton 1");}

}

Classe Intro

package telecom.stage.test.client;

import com.google.gwt.core.client.EntryPoint;import com.google.gwt.dom.client.Style.Unit;import com.google.gwt.event.dom.client.ClickEvent;import com.google.gwt.event.dom.client.ClickHandler;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.ui.Button;import com.google.gwt.user.client.ui.RootLayoutPanel;

public class Intro implements EntryPoint {

public void onModuleLoad() {

final Button bouton_1=new Button();bouton_1.setText("Bouton");Handler han=new Handler();bouton_1.addClickHandler(han);RootLayoutPanel.get().add(bouton_1);RootLayoutPanel.get().setWidgetLeftWidth

(bouton_1,40,Unit.PCT,15,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(bouton_1,45,Unit.PCT,10,Unit.PCT);}}

Si on a, par exemple deux boutons, on peut utiliser la méthode getSource().

Exemple :

public void onModuleLoad() {

bouton_1.setText("Bouton 1");bouton_1.addClickHandler(this);bouton_2.setText("Bouton 2");bouton_2.addClickHandler(this);HorizontalPanel monPanel = new HorizontalPanel();monPanel.add(bouton_1);monPanel.add(bouton_2);RootLayoutPanel.get().add(monPanel);RootLayoutPanel.get().setWidgetLeftWidth

(monPanel,40,Unit.PCT,15,Unit.PCT);

Page 17

Page 18: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

RootLayoutPanel.get().setWidgetTopHeight (monPanel,45,Unit.PCT,10,Unit.PCT);

}public void onClick (ClickEvent event){if (event.getSource()==bouton_1){Window.alert("Bonjour bouton 1");}else {Window.alert("Bonjour bouton 2");}}

Si on veut vérifier si un champs est vide et éventuellement on veut avertir l’utilisateur on peut ajouter

la méthode getValue().

Exemple:

public void onClick (ClickEvent event){if (nom.getValue()==""){Window.alert ("Entrer votre nom SVP");}else {Window.alert("Bonjour "+nom.getValue());}}

Noter bien que  « nom » est une zone de text

final TextBox nom=new TextBox();final Button tester=new Button("valider");tester.addClickHandler(this);

7.4 Exemples de Widgets et Handlers

Voisi une liste de widgets utilisable avec GWT.

7.4.1 Label

Classe : Label ("votre texte")

Label vous permet d'afficher un texte à l'écran

public class Intro implements EntryPoint {

final Label labelNom =new Label("Ceci est un Label");public void onModuleLoad() {RootLayoutPanel.get().add(labelNom);RootLayoutPanel.get().setWidgetLeftWidth

(labelNom,40,Unit.PCT,15,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(labelNom,45,Unit.PCT,15,Unit.PCT);}

Page 18

Page 19: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

}

7.4.2 Button

Classe : Button (‘’Titre de votre bouton’’)

public class Intro implements EntryPoint {

public void onModuleLoad() {final Button bouton_1=new Button();bouton_1.setText("Bouton");bouton_1.addClickHandler(new ClickHandler (){public void onClick (ClickEvent event) {Window.alert("Bonjour bouton 1");}});RootLayoutPanel.get().add(bouton_1);RootLayoutPanel.get().setWidgetLeftWidth

(bouton_1,40,Unit.PCT,10,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(bouton_1,45,Unit.PCT,6,Unit.PCT);}}

7.4.3 RadioButton

Classe : RadioButton ("nom du groupe","valeur")

Un seul bouton par "groupe" peut être coché (ici tous les boutons appartiennent au groupe "rG").

Une interface ("ValueChangeHandler") permet de suivre votre choix.

public class Intro implements EntryPoint ,ValueChangeHandler<Boolean> {final RadioButton r1 = new RadioButton ("rG","un" );final RadioButton r2 = new RadioButton ("rG","deux");final RadioButton r3 = new RadioButton ("rG","trois");public void onModuleLoad() {final VerticalPanel monPanel = new VerticalPanel ();monPanel.add (r1);monPanel.add (r2);monPanel.add (r3);

Page 19

Page 20: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

r1.addValueChangeHandler(this);r2.addValueChangeHandler(this);r3.addValueChangeHandler(this);RootLayoutPanel.get().add(monPanel);RootLayoutPanel.get().setWidgetTopBottom

(monPanel,40,Unit.PCT,40,Unit.PCT);RootLayoutPanel.get().setWidgetLeftRight

(monPanel,40,Unit.PCT,50,Unit.PCT);}public void onValueChange (ValueChangeEvent<Boolean> event){if (event.getSource()==r1){Window.alert("hello Un");}if (event.getSource()==r2){Window.alert("hello Deux");}if (event.getSource()==r3){Window.alert("hello Trois");}}}

L'interface "ValueChangeHandler" doit être suivie par le type de valeur qui va changer (ici

« Boolean », le radioButton est coché (true) ou n'est pas coché (false)). La méthode getSource( )

appliquée à l'instance "event" (event.getSource()) renvoie le nom de l'instance qui vient de changer.

7.4.4 CheckBox

Classe : CheckBox ("légende de la CheckBox")

public class Intro implements EntryPoint ,ValueChangeHandler<Boolean> {final CheckBox maBox = new CheckBox ("La CheckBox n'est pas coche");String etat;public void onModuleLoad() {etat="La CheckBox n'est pas coche";maBox.addValueChangeHandler(this);RootLayoutPanel.get().add(maBox);RootLayoutPanel.get().setWidgetTopHeight

(maBox,40,Unit.PCT,20,Unit.PCT);RootLayoutPanel.get().setWidgetLeftWidth

(maBox,40,Unit.PCT,15,Unit.PCT);}public void onValueChange(ValueChangeEvent<Boolean> event){if (event.getValue()==true){etat="La CheckBox est coche";}else{etat="La CheckBox n'est pas coche";}maBox.setText(etat);}}

Page 20

Page 21: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

7.4.5 ToggleButton

ToggleButton est un bouton qui possède 2 états : "enfoncé" ou "non enfoncé", il y a donc une

possibilité de changer le text du bouton selon l’état.(on a ‘NON’ pour non enfoncé et ‘OUI’ pour

enfoncé)

public class Intro implements EntryPoint ,ValueChangeHandler<Boolean> {final ToggleButton tBouton= new ToggleButton ("NON","OUI");public void onModuleLoad() {tBouton.addValueChangeHandler(this);RootLayoutPanel.get().add(tBouton);RootLayoutPanel.get().setWidgetTopHeight

(tBouton,40,Unit.PCT,4,Unit.PCT);RootLayoutPanel.get().setWidgetLeftWidth

(tBouton,40,Unit.PCT,3,Unit.PCT);}public void onValueChange(ValueChangeEvent<Boolean> event){if (event.getValue()==true){Window.alert("Le bouton est enfonce");}else{Window.alert("Le bouton n'est pas enfonce");}}}

7.4.6 TextBox

C’est un champ de saisie. On va introduire un nouveau Handler : KeyUpHandler

public class Intro implements EntryPoint ,KeyUpHandler {final TextBox tBox= new TextBox ();final Label nbr=new Label();final HorizontalPanel monHPanel=new HorizontalPanel();public void onModuleLoad() {tBox.addKeyUpHandler(this);tBox.setText("Taper votre texte ici");monHPanel.add(tBox);monHPanel.add(nbr);RootLayoutPanel.get().add(monHPanel);RootLayoutPanel.get().setWidgetTopHeight

(monHPanel,40,Unit.PCT,4,Unit.PCT);RootLayoutPanel.get().setWidgetLeftWidth

(monHPanel,40,Unit.PCT,30,Unit.PCT);}public void onKeyUp(KeyUpEvent event){String nbrT=tBox.getText();nbr.setText(" Vous avez tape "+nbrT.length()+" caractères");}}

Nous avons utilisé ici l'interface KeyUpHandler avec sa méthode associée onKeyUp. Cette méthode

Page 21

Page 22: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

est appelée après chaque appui sur une touche du clavier (il existe aussi les interfaces

KeyDownHandler (quand une touche est relâchée, la méthode onKeyDown est appelée) et

KeyPressHandler (quand une touche est pressée puis relâchée, la méthode onKeyPress est appelée)).

Notez aussi l'utilisation de la méthode "length ( )" qui compte le nombre de caractères dans une

chaîne.

Il existe aussi la classe PasswordText qui fonctionne exactement comme TextBox (les caractères sont

masqués, c'est la seule différence).

7.4.7 DatePicker (calendrier)

DatePicker fournit un calendrier qui permet de sélectionner une date.

Exemple :

public class Intro implements EntryPoint, ValueChangeHandler<Date> {final DatePicker calendrier=new DatePicker();final Label dateLabel = new Label();final DateTimeFormat formatDate=

DateTimeFormat.getFormat("dd/MM/yyyy");final VerticalPanel vPanel=new VerticalPanel();public void onModuleLoad() {calendrier.addValueChangeHandler(this);vPanel.add(calendrier);vPanel.add(dateLabel);RootLayoutPanel.get().add(vPanel);RootLayoutPanel.get().setWidgetTopBottom

(vPanel,20,Unit.PCT,40,Unit.PCT);RootLayoutPanel.get().setWidgetLeftRight

(vPanel,20,Unit.PCT,60,Unit.PCT);}public void onValueChange (ValueChangeEvent<Date> event){Date choixDate=event.getValue();dateLabel.setText("Vous avez choisi le

"+formatDate.format(choixDate));}}

Résultat :

Page 22

Page 23: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

7.4.8 ListBox

La listBox vous permet de choisir entre plusieurs possibilités.

public class Intro implements EntryPoint, ClickHandler {final Button valider=new Button();final ListBox listB=new ListBox();public void onModuleLoad() {valider.setText("Valider");valider.addClickHandler(this);listB.addItem("fruit");listB.addItem("viande");listB.addItem("légume");RootLayoutPanel.get().add(valider);RootLayoutPanel.get().add(listB);RootLayoutPanel.get().setWidgetLeftWidth

(valider,10,Unit.PCT,15,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(valider,25,Unit.PCT,5,Unit.PCT);RootLayoutPanel.get().setWidgetLeftWidth

(listB,10,Unit.PCT,8,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(listB,10,Unit.PCT,4,Unit.PCT);}public void onClick (ClickEvent event) {if (listB.isItemSelected(0)){Window.alert("fruit");}if (listB.isItemSelected(1)){Window.alert("viande");}if (listB.isItemSelected(2)){

Page 23

Page 24: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Window.alert("légume");}}}Une fois on a créé une instance de de ListBox, on utilise la méthode « addItem » pour

ajouter des élément à notre liste.

la méthode « isItemSelected(0) » renvoi true si vous sélectionnez le premier choix, et renvoi  « false »

si vous optez pour autre choix. C’est le même cas pour les autres(Par exemple pour

« isItemSelected(1) »)

Notez Bien que le compteur des éléments ajouter dans la liste commence par 0 et non pas 1.

7.4.9 DialogBox

La classe DialogBox vous permet de faire apparaître une fenêtre de nulle part.

Votre DialogBox pourra contenir n'importe quel widget, il suffira de créer une instance (DialogBox

maBox= new DialogBox( )) et utilisé la méthode « setWidget(votre widget) ».

La méthode « show( ) » permet d’afficher le DialogBox.

La méthode « center( ) » le place au centre de l’écran.

La méthode  « setAnimationEnabled » avec « true » permet d’ajouter une animation lors de

l’apparition et la fermeture de votre DialogBox.

La méthode « hide( ) » fait disparaître la DialogBox.

public class Intro implements EntryPoint, ClickHandler {final DialogBox maBox =new DialogBox();final Button monBout1=new Button("Cliquez ici");final Button monBout2=new Button ("OK");final Label monLabel = new Label("Voici votre DialogBox");final VerticalPanel vPanelBox= new VerticalPanel();public void onModuleLoad() {RootLayoutPanel.get().add(monBout1);RootLayoutPanel.get().setWidgetLeftWidth

(monBout1,40,Unit.PCT,15,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(monBout1,45,Unit.PCT,15,Unit.PCT);vPanelBox.add(monLabel);vPanelBox.add(monBout2);maBox.setText("Ma DialogBox");maBox.setAnimationEnabled(true);maBox.setGlassEnabled(true);maBox.add(vPanelBox);monBout1.addClickHandler(this);}public void onClick (ClickEvent event) {maBox.center();monBout2.addClickHandler (new ClickHandler (){

Page 24

Page 25: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

public void onClick (ClickEvent event) {maBox.hide();}}) ;}}

7.4.10 Image

Il est possible d'inclure des images dans une page directement en HTML, mais il est aussi

possible (et même conseillé) de créer une instance de la classe Image, cette instance pourra être

utilisée comme n'importe quel widget. Nos images (format jpeg) devront être sauvegardées dans un

dossier images qu'il faudra créer dans le dossier war.

Au moment de la création d’une instance image, il faut indiquer le chemin de votre image (ici,

"images/photo.jpg")

public class Intro implements EntryPoint {public void onModuleLoad() {

final Image monImage = new Image ("images/photo.jpg");final Label monTexte = new Label ("Voici une photo");final VerticalPanel monPanel = new VerticalPanel ();monPanel.add(monTexte);monPanel.add(monImage);RootLayoutPanel.get().add(monPanel);RootLayoutPanel.get().setWidgetTopHeight

(monPanel,0,Unit.PCT,100,Unit.PCT);RootLayoutPanel.get().setWidgetLeftWidth

(monPanel,0,Unit.PCT,100,Unit.PCT);}}

7.5 Conclusion

Les widgets, éventuellement les Handlers, présenter dans ce document ne sont pas les seules, il

existe beaucoup d’autres.

8 Hello GWT

Pour clôturer cette introduction, nous allons créer un site de réservation pour un hôtel fictif à cité

Ennasr. Nous dévelpperons uniquement la partie "client". La création de ce site est un bon moyen

Page 25

Page 26: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

pour, non seulement réinvestir toutes les notions vues précédemment, mais aussi avoir un premier

exemple de la mise en place d'un projet plus "complexe".

Ce site est visible à l'adresse suivante : http://www.jihedv1.appspot.com/

Nous allons voir ensemble comment obtenir ce résultat (puisque ce site n'a qu'un intérêt

pédagogique, l'aspect esthétique a été totalement négligé)

Si à votre tour vous désirez créer un site accessible depuis internet, il faudra vous créer un compte

Gmail pour pouvoir vous créer un compte Google App Engine sur :

http://code.google.com/intl/fr-FR/appengine/

Il suffit ensuite d'utiliser l'icône dans Eclipse pour déployer votre site.

Comme vous pouvez constater, la page est découper en deux parties, la partie situer à votre droite

n’est

qu’une simple programmation en utilisant le html-5:

Le titre :

La carte indiquant les cordonnées de l’hôtel :

Page 26

Page 27: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Le marquer vert indique la position de l’hôtel et votre position sera indiquer par un marquer rouge

(Vous devez activer l’option dans les paramètres de votre navigateur « Autoriser tous les sites à suivre

ma position géographique »).

Une galerie de photo qu’on peut glissé-déposer dans le cadre pour agrandir l’image :

Voici le code de cette html de cette page :

<!doctype html>

<html> <head>

Page 27

Page 28: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link type="text/css" rel="stylesheet" href="Essai.css" media="screen"> <title>Site de reservation d'hôtel</title> <script type="text/javascript" src="essai/essai.nocache.js"></script><script type="text/javascript" src="jq/jquery.min.js"> </script> <script type="text/javascript" src="js/js.js"></script> </head> <body> <noscript> <div id="st1"> Your web browser must have JavaScript enabled in order for this application to display correctly. </div> </noscript> <h1>Site de reservation d'hôtel a cite Ennasr</h1> <div id="pos"> Notre Hôtel <table> <tr> <td> <img id="map" alt="Notre Géolocalisation"src="http://maps.google.com/maps/api/staticmap?&amp;size=500x300&amp;sensor=false&amp;maptype=roadmap&amp;markers=color:green|label:A|Tunisia+Tunis+Ennasr"> </td> </tr> </table> <table> <tr> <td colspan="5" rowspan="3" id="preview">Agrandir l'image</td> </tr> </table> <table> <tr><td id="images"><img src="images/c.jpg" data-large="images/cp.jpg" alt="chambre a coucher"draggable="true"></td> <td id="images"><img src="images/caf.jpg" data-large="images/cafp.jpg" alt="chambre a coucher"draggable="true"></td> <td id="images"><img src="images/a.jpg" data-large="images/ap.jpg" alt="chambre a coucher"draggable="true"></td></tr> </table> </div></body></html>

Le reste est uniquement écrit en Java :

La classe calendrier :

Page 28

Page 29: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

public class calendrier implements ValueChangeHandler<Date>{DatePicker date=new DatePicker();

final Label Lab=new Label("Veuillez saisir votre date d'arrivee"); final DateTimeFormat dtf= DateTimeFormat.getFormat("dd/MM/yyyy"); String str; public VerticalPanel afficher() { date.addValueChangeHandler(this); VerticalPanel vp=new VerticalPanel(); vp.add(Lab); vp.add(date); vp.setSpacing(10); return vp; } public void onValueChange(ValueChangeEvent<Date> event) { Date d=event.getValue(); if(d.after(new Date())) { str="votre date d'arrivee sera le "+dtf.format(d); Lab.setText(str); } } public String dateGetter() { if(str=="") { Window.alert("entrer une date svp"); return null; } else{return str;} }}

La méthode affiche renvoie un VerticalPanel qui est constitué de 2 widgets (un DatePicker et un

Label).

La méthode onValueChange est appelée lorsque la date sélectionnée change. Cette méthode crée une

chaîne (str) "Votre date d'arrivée : "+la date sélectionnée sur le calendrier.

Page 29

Page 30: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

Cette chaîne est ensuite utilisée pour "remplir" le Label. La condition : if (d.after(new Date()),

cette

condition permet d'empêcher le choix d'une date d'arrivée antérieure à la date du jour.

La méthode dateGetter vérifie si une date a bien été sélectionné sinon, une fenêtre "Entrer une date

SVP" apparaît.

La classe chambre :

public class chambre implements ValueChangeHandler<Boolean>{ int ch=0,t=0;

final RadioButton r1=new RadioButton("g1","suite");final RadioButton r2=new RadioButton("g1","familiale");final RadioButton r3=new RadioButton("g1","couple");final Label lab= new Label("type de chambre");

public HorizontalPanel hpn(){

r1.addValueChangeHandler(this);final HorizontalPanel hp= new HorizontalPanel();hp.add(lab);hp.add(r1);hp.add(r2);hp.add(r3);hp.setSpacing(10);return hp;

}

public void onValueChange(ValueChangeEvent<Boolean> event) {

if(event.getSource()==r1){ch=1;}else if(event.getSource()==r2){ch=2;}else {ch=3;}

}public int tarif(){

if(ch==1){t=500;}else if(ch==2){t=180;}else {t=90;}return t;

}public String cho(){

String choix;if (ch==1){choix = "Vous prendrez le suite";}else if(ch==2){choix = "Vous prendrez la chambre familiale de 5 personnes";}else{

choix = "Vous prendrez la chambre de 2 persones";

Page 30

Page 31: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

}return choix;}}

La méthode hpn crée un panel et le retourne. La méthode onValueChange modifie la variable ch

selon laquelle on peut à laide de la méthode tarif de savoir le coût à inclure dans le calcule final de la

somme à payer.

La classe nuit (nombre de nuit estimer) :

public class Nuit {

final Label lab=new Label("Nombre de nuits estimees");final ListBox lbn=new ListBox();final HorizontalPanel hp=new HorizontalPanel();public HorizontalPanel nbn(){

lbn.addItem("une");lbn.addItem("deux");lbn.addItem("trois");lbn.addItem("quattre");lbn.addItem("cinq");lbn.addItem("six");lbn.addItem("sept");lbn.addItem("huit");lbn.addItem("neuf");hp.add(lab);hp.add(lbn);hp.setSpacing(10);return hp;

}public int nbj(){

int n=1;if(lbn.isItemSelected(0)){ n=1;}if(lbn.isItemSelected(1)){ n=2;}if(lbn.isItemSelected(2)){ n=3;}if(lbn.isItemSelected(3)){ n=4;}if(lbn.isItemSelected(4)){ n=5;}if(lbn.isItemSelected(5)){ n=6;}if(lbn.isItemSelected(6)){ n=7;}if(lbn.isItemSelected(7)){ n=8;}if(lbn.isItemSelected(8)){ n=9;}return n; }}

La méthode nbn crée un panel et le retourne. La méthode nbj retourne un entier qui symbolise le

nombre de nuit à passer.

Page 31

Page 32: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

La classe nourriture est quasi-équivalente à la classe chambre.

public class nourriture implements ValueChangeHandler<Boolean> {

final RadioButton r1=new RadioButton("g2","demi pension");final RadioButton r2=new RadioButton("g2","pension complete");final Label lab= new Label("type de reservation");Boolean ch=false;int n=0;public HorizontalPanel hpn(){

r1.addValueChangeHandler(this);final HorizontalPanel hp= new HorizontalPanel();hp.add(lab);hp.add(r1);hp.add(r2);hp.setSpacing(10);return hp;

}public int ch(){

if(ch==false){n=1;}else {n=2;}return n;

}public void onValueChange(ValueChangeEvent<Boolean> event) {

if(event.getValue()==true){ch=true;}else{ch=false;}

}public String cho(){

String choix;if (ch==false){choix = "Vous prendrez le petit dejeuner et le dinner";}else {choix = "Vous prendrez le petit dejeuner, le repas et le

dinner";}return choix;}

}

Pour terminer, la classe Essai gère l'affichage des panels, le calcul du nombre de chambres, le nombre

des nuits, le type d’accommodation choisi, le prix du séjour, le montant de l'acompte et la création

de la fenêtre de résumé.

public class Essai implements EntryPoint, ClickHandler {//liste des choix et les boutons de validationfinal Button bv=new Button("Valider");final Label rescal=new Label ();final Label reschamb=new Label ();final Label resnt=new Label ();final Label resnour=new Label ();final Label resprix=new Label ();final Label resac=new Label ();final Button resumValid=new Button("Valider");

Page 32

Page 33: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

final Button val=new Button("valider");//définition des différentes instancescalendrier cal=new calendrier();chambre chamb=new chambre();Nuit nt=new Nuit();nourriture nour=new nourriture();//création des diffèrents panel à partir des instances crééVerticalPanel vpcal=cal.afficher();HorizontalPanel hpchamb=chamb.hpn();HorizontalPanel hpnuit=nt.nbn();HorizontalPanel hpnour=nour.hpn();public void onModuleLoad(){

val.addClickHandler(this);//Mise en place des PanelsRootLayoutPanel.get().add(vpcal);RootLayoutPanel.get().setWidgetLeftWidth

(vpcal,3,Unit.PCT,20,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(vpcal,10,Unit.PCT,40,Unit.PCT);RootLayoutPanel.get().add(hpnuit);RootLayoutPanel.get().setWidgetLeftWidth

(hpnuit,3,Unit.PCT,20,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(hpnuit,70,Unit.PCT,10,Unit.PCT);RootLayoutPanel.get().add(hpchamb);RootLayoutPanel.get().setWidgetLeftWidth

(hpchamb,3,Unit.PCT,20,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(hpchamb,50,Unit.PCT,10,Unit.PCT);RootLayoutPanel.get().add(hpnour);RootLayoutPanel.get().setWidgetLeftWidth

(hpnour,3,Unit.PCT,20,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(hpnour,60,Unit.PCT,10,Unit.PCT);RootLayoutPanel.get().add(val);RootLayoutPanel.get().setWidgetLeftWidth

(val,3,Unit.PCT,20,Unit.PCT);RootLayoutPanel.get().setWidgetTopHeight

(val,85,Unit.PCT,10,Unit.PCT);

}//La méthode onClick est appelée en cas de validation de la

réservationpublic void onClick(ClickEvent event){

if(cal.dateGetter()!=null){ //mise en place des labels du résumé

int prix=0,t=0,n=0,c=0;rescal.setText(cal.dateGetter());reschamb.setText(chamb.cho());resnt.setText("vous avez choisi "+nt.nbj()+" nuit(s)");resnour.setText(nour.cho());t=chamb.tarif();n=nt.nbj();c=nour.ch();//Calcul du prix du séjourprix=n*c*t;//Calcul du montant de l'acomptedouble prixAcDouble=prix*0.2;int prixAc=(int)prixAcDouble;

Page 33

Page 34: Introduction à GWT

[Elaborer par Chabbeh Jihed ([email protected]) ]

resprix.setText("Le prix de votre sejour s'eleve a "+prix+" euros par personnes");

resac.setText("Accompte a verser : "+prixAc+" euros (20% du montant par personnes)");

//création du Panel "résumé"VerticalPanel vpr=new VerticalPanel();vpr.add(rescal);vpr.add(reschamb);vpr.add(resnour);vpr.add(resnt);vpr.add(resprix);vpr.add(resac);vpr.add(resumValid);vpr.setSpacing(10);//création de la fenêtre "résumé"final DialogBox db=new DialogBox();db.setAnimationEnabled(true);db.setGlassEnabled(true);db.setText("Recapitulation de votre reservation");db.setWidget(vpr);db.center();resumValid.addClickHandler(new ClickHandler() {public void onClick(ClickEvent event) {db.hide();//appel de la page www.google.frWindow.Location.assign("http://www.google.fr");}});}}}

9 Conclusion générale

Le GWT est un outil émergent qui vient de conquérir le domaine de développement web tout en

fixant un nouveau plafond de concurrence. Je tiens, à la fin de ce document, de remercier la

communauté des développeurs open source qui n’hésitent jamais de publié des documents de valeurs.

10 Bibliographie

https://developers.google.com/

https://www.wikipedia.org/

http://www.codes-sources.com/

Le livre « programmation gwt 2 » de Sami Jabeur

Page 34