Robert Hanson, Adam Tacy
GWT im Einsatz
Inhalt
7
Vorwort
15
Danksagung
17
Zu diesem Buch
19
Teil 1 Erste Schritte
25
2 Die Standardanwendung erstellen
59
2.1 Der Entwicklungslebenszyklus der GWTStandardanwendung
60
2.2 Phase 1: Eine GWT- Anwendung erstellen
64
2.2.1 Das Projekt erstellen
68
2.2.2 Eine Anwendung erstellen
70
2.2.3 Internationalisierung einrichten
74
2.2.4 Internationalisierung implementieren
76
2.2.5 Unit-Testfälle erstellen
77
2.2.6 Import in ein IDE
79
2.3 Zusammenfassung
82
3 Zur eigenen Anwendung fortschreiten
83
3.1 Beschreibung des Anwendungsbeispiels
83
3.2 Phase 2: Die Anwendung entwickeln
85
3.2.1 Internationalisierung implementieren
87
3.2.2 Anwendung erstellen
90
3.2.3 Formate anwenden
100
3.3 Phase 3: Testen und Debuggen im Hostmodus
103
3.3.1 Auf den Hostmodus vorbereiten
104
3.3.2 Dashboard im Hostmodus ausführen
107
3.3.3 Dashboard im Hostmodus mit Eclipse debuggen
109
3.4 Phase 4: Code kompilieren
111
3.4.1 Code kompilieren und für den Webmodus vorbereiten
111
3.4.2 Kompilierungsergebnisse anzeigen
113
3.5 Phase 5: Code bereitstellen
115
3.5.1 Bereitstellung auf einem Webserver
115
3.5.2 Bereitstellung auf einem Dateisystem
115
3.6 Phase 6: Ausführung im Webmodus
116
3.7 Anwendungsprotokollierung implementieren
117
3.7.1 Informationen auf der Clientseite protokollieren
117
3.7.2 Informationen auf der Serverseite protokollieren
120
3.8 Zusammenfassung
120
Teil 2 Benutzeroberflächen erstellen
123
4 Mit Widgets arbeiten
125
4.1 Was ist ein Widget?
127
4.2 Die Standard-Widgets in GWT
130
4.3 Neue Widgets erstellen
155
4.4 Das Dashboard-Widget entwickeln
164
4.5 Zusammenfassung
169
5 Mit Panels arbeiten
171
5.1 Was ist ein Panel?
172
5.1.1 Panels als Java-Objekte verwenden
172
5.1.2 Panels als DOM-Elemente betrachten
173
5.2 Die Standard-Panels in GWT
175
5.2.1 Mit einfachen Panels interagieren
177
5.2.2 Komplexere Panels
183
5.2.3 Auf HTML-Tabellen basierende Panels
190
5.2.4 Zusammengesetzte Panels
194
5.3 Neue Panels erstellen
195
5.3.1 Panels von Grund auf neu erstellen
195
5.3.2 Panels durch Erweiterung eines vorhandenen Panels erstellen
198
5.4 Das Panel erstellen
200
5.5 Zusammenfassung
203
6 Ereignisbehandlung
205
6.1 Ereignisse untersuchen
206
6.1.1 Unterschiede bei browserspezifischen Ereignismodellen
207
6.1.2 Das GWT-Ereignisbehandlungsmodell
209
6.2 Auf Ereignisse horchen
213
6.2.1 Ereignisse versenken
213
6.2.2 Versenkte Ereignisse mit der Methode verwalten
215
6.2.3 Versenkte Ereignisse mit der Methode verknüpfen
218
6.2.4 Ereignisvorschau
219
6.2.5 Ereignisse durch Erweiterung von Listener-Klassen behandeln
221
6.2.6 Ereignisse in Ihren GWT-Code verschieben
222
6.2.7 Ereignisbehandlung durch den Browser verhindern
226
6.3 Browser-Standardereignisse behandeln
226
6.3.1 Auf Änderungen reagieren
228
6.3.2 Klick, klick
231
6.3.3 Fokus erhalten und verlieren
231
6.3.4 Tastatureingaben erfassen
232
6.3.5 Bilder laden
232
6.3.6 Mauseingaben verwalten
233
6.3.7 Bildlauf
234
6.3.8 Fenstergrößenänderung
235
6.3.9 Schließ-Ereignisse
236
6.4 Andere Ereignistypen behandeln
240
6.4.1 Formulare behandeln
240
6.4.2 Auf schließende Popup-Fenster reagieren
240
6.4.3 Registerkarten-Ereignisse
241
6.4.4 Tabellenereignisse
242
6.4.5 Baumstruktur-Ereignisse
243
6.5 Drag & Drop implementieren
244
6.5.1 Ziehen implementieren
244
6.5.2 Ablegen implementieren
248
6.6 Zusammenfassung
251
7 Zusammengesetzte Widgets erstellen
253
7.1 Was ist ein zusammengesetztes Widget?
254
7.2 Die Entwicklung zusammengesetzter Widgets
255
7.3 Editierbare Beschriftungen erstellen
256
7.3.1 Schritt 1: Komponenten ermitteln
258
7.3.2 Schritt 2: Panel-Layout und Struktur auswählen
260
7.3.3 Schritt 3: Die passenden GWT-Java-Schnittstellen implementieren
262
7.3.4 Schritt 4: Das zusammengesetzte Widget erstellen
265
7.3.5 Schritt 5: Das zusammengesetzte Widget formatieren
273
7.4 Ein zusammengesetztes Widget aus anderen zusammengesetzten Widgets erstellen
275
7.4.1 Schieberegler erstellen
276
7.4.2 Das Composite
278
erstellen
278
7.5 Das Dashboard-Composite erstellen
279
7.6 Zusammenfassung
281
8 JSNI-Komponenten erstellen
283
8.1 Einführung in JSNI
285
8.1.1 JSNI im Überblick
286
8.2 Kommunikation via JSNI
295
8.2.1 Mit dem Browser via GWT-Java kommunizieren
295
8.2.2 Mit dem Browser via JavaScript kommunizieren
296
8.2.3 Über eine JavaScript- API mit einer GWT- Anwendung kommunizieren
298
8.2.4 Kommunikation zwischen GWT- Anwendungen
300
8.3 Eine JavaScript-Bibliothek laden
302
8.3.1 Mit HTML eine JavaScript-Bibliothek laden
303
8.3.2 Mit der Modul-XML-Datei eine JavaScript-Bibliothek laden
303
8.4 Eine einfache JavaScript-Bibliothek kapseln
304
8.4.1 Auf eine geladene JavaScript-Bibliothek zugreifen
305
8.4.2 Das Widget in einer Anwendung einsetzen
310
8.5 Eine komplexe JavaScript-Bibliothek kapseln
311
8.5.1 Klassen erstellen
312
8.5.2 JavaScript-Objekte als Java-Objekte belassen
313
8.5.3 Benutzerdefinierten Code aus einer Bibliothek aufrufen
314
8.5.4 Komplexes, gekapseltes Widget in einer Anwendung einsetzen
316
8.6 Zusammenfassung
317
9 Eine Anwendung modularisieren
319
9.1 Modularisierungsstruktur erstellen
320
9.1.1 Modularisierung in GWT
320
9.1.2 Andere Module in eine Anwendung einbinden
322
9.1.3 Quell- und andere Ressourcenpfade festlegen
326
9.1.4 Serverressourcen einer Anwendung definieren
327
9.1.5 Die GWT-Eigenschaften einer Anwendung verwalten
328
9.1.6 Klassen basierend auf Eigenschaftswerten ersetzen
332
9.1.7 Generatoren in der Modul-XML-Datei registrieren
333
9.1.8 Ressourcen zur Laufzeit in eine Anwendung injizieren
334
9.1.9 Den Eintrittspunkt einer Anwendung festlegen
337
9.1.10 Die Modul-XML-Datei der Anwendung
337
9.2 Drittanbietermodule einbinden
339
9.3 Eigene Module packen
341
9.4 Java-Package-Struktur erstellen
343
9.5 Zusammenfassung
344
Teil 3 Fortgeschrittene Techniken
345
10 Kommunikation mit GWT-RPC
347
10.1 Grundlegende RPC-Konzepte
348
10.1.1 Überblick zur asynchronen Kommunikation
349
10.1.2 Beschränkungen bei der Kommunikation mit Remoteservern
350
10.1.3 Das Projekt
352
10.2 GWT-RPC implementieren
354
10.2.1 Überblick zu den serialisierbaren Datenobjekten
355
10.2.2 Den GWT-RPC-Dienst definieren
359
10.2.3 Vorbereitung der Clientseite eines GWT-RPC-Aufrufs
363
10.2.4 Aufruf des entfernten Serverdienstes
365
10.3 Zusammenfassung des Projekts
367
10.3.1 Projektübersicht
368
10.3.2 Serverseitige Dienstimplementierung
369
10.3.3 Aufruf des Dienstes auf dem Client
370
10.4 Zusammenfassung
370
11 Die clientseitige RPC-Architektur
371
11.1 Clientcode strukturieren
371
11.1.1 Die Komponente kapseln
372
11.1.2 Remoteaufrufe in einer Fassade kapseln
376
11.1.3 Rückrufroutine mit dem Kommandomuster
378
11.2 Verschiedene Abfragetechniken untersuchen
385
11.2.1 Aspekte der Abfragetechnik
386
11.2.2 Implementierung einer sich fortlaufend aktualisierenden Komponente
387
11.2.3 Server-Pushs durch Blockieren von Server-Threads emulieren
391
11.3 Benutzerdefinierte Feldserialisierer schreiben
394
11.3.1 Klasse für einen benutzerdefinierten Feldserialisierer erstellen
395
11.3.2 Benutzerdefinierte Feldserialisierung implementieren
397
11.4 Zusammenfassung
399
12 Klassisches Ajax und HTMLFormulare
401
12.1 Klassisches Ajax mit
402
12.1.1 HTTP-Methoden
402
12.1.2 Einfaches RPC mit
405
12.1.3 Mit XML-Daten laden
408
12.2 Grundlagen zu
415
12.2.1 Grundlagen zu
415
12.2.2 Auf Ereignisse hören
418
12.2.3 Ziel ändern
419
12.2.4 Verschiedene Formularelemente verwenden
422
12.3 Zusammenfassung
429
13 Interoperabilität mit JSON erzielen
431
13.1 Einführung in JSON
432
13.1.1 Das JSON-Datenformat
432
13.1.2 Mit JSONParser JSON-Nachrichten analysieren
433
13.2 Die JSON-Datenobjekte in GWT
434
13.2.1 Das Objekt
434
13.2.2 Grundlegende JSON-Typen
435
13.2.3 JSONValue-Objekte in einem JSONArray speichern
436
13.2.4 JSONValue-Objekte in einem JSONObject sammeln
438
13.3 Suchkomponente mit JSON erstellen
439
13.3.1 Die Yahoo Search- API
440
13.3.2 Suchkomponente implementieren
441
13.3.3 JSON-Daten an den Server senden
443
13.3.4 JSON-Serverantwort analysieren und validieren
445
13.4 Proxy-Dienst für Yahoo Search implementieren
448
13.4.1 JSON mit Java auf dem Server verwenden
449
13.4.2 JSON mit Perl auf dem Server verwenden
452
13.4.3 JSON mit Ruby auf dem Server verwenden
454
13.5 Zusammenfassung
456
14 Automatische Codegenerierung
457
14.1 Neue Typen generieren
458
14.2 GWT-Generatoren
459
14.2.1 Grundlegender Generatorcode
461
14.3 Generator für das Dashboard erstellen
462
14.3.1 Auf die Eingabeklasse zugreifen
463
14.3.2 Auf Kontexteigenschaften zugreifen
464
14.3.3 Protokollierung für Generatoren
465
14.3.4 Generieren der neuen Typenstruktur
466
14.3.5 Die neue Klasse erstellen
467
14.3.6 Generierte Klassen verwenden
473
14.4 Zusammenfassung
475
15 Anwendungen basierend auf GWTEigenschaften modifizieren
477
15.1 Kurze Zusammenfassung zu den Eigenschaften
478
15.2 Browserunterschiede verwalten
479
15.2.1 Wie GWT Browserunterschiede verwaltet
479
15.2.2 Das Flash-Widget erstellen
480
15.2.3 Eigenschaftsersetzung einrichten
483
15.3 Vollständige Unterstützung der Internationalisierung
484
15.3.1 Die statische Internationalisierung
485
15.3.2 Die dynamische Internationalisierung
498
15.4 Anwendung gebietsschemaspezifisch ändern
499
15.4.1 Standardkomponente implementieren
500
15.4.2 Gebietsschemaspezifische Klassen
500
15.5 Benutzerdefinierte Eigenschaften implementieren
502
15.5.1 Benutzerdefinierte Eigenschaften definieren
502
15.5.2 Benutzerdefinierten Eigenschaftsanbieter definieren
502
15.5.3 Ermittelten Eigenschaftswert überprüfen
503
15.5.4 Code erstellen
504
15.6 Zusammenfassung
504
Teil 4 Abschließende Ergänzungen
505
16 GWT-Anwendungen testen und bereitstellen
507
16.1 GWT-Code mit JUnit testen
507
16.1.1 JUnit für GWT-Entwickler
508
16.1.2 Testfall erstellen
513
16.1.3 Asynchronen Code testen
516
16.2 GWT- Anwendungen bereitstellen
518
16.2.1 Projekt organisieren
519
16.2.2 RPC-Servlets installieren
526
16.3 Zusammenfassung
532
17 Wie GWT funktioniert
533
17.1 Der Kompilierungsprozess und die Ausgabe
533
17.1.1 Der Kompilierungsvorgang
534
17.1.2 Was der Compiler ausgibt
536
17.2 Der Lademechanismus von GWT
541
17.2.1 Altanwendungen
541
17.2.2 Standardanwendungen
542
17.2.3 Bootstrapping für die Standardanwendung
543
17.2.4 Website-übergreifende Anwendungen
548
17.3 Java in JavaScript kompilieren
548
17.3.1 Das generierte JavaScript untersuchen
548
17.3.2 Java-Standardobjekte: Das
549
Objekt
549
17.3.3 Programmcode als JavaScript untersuchen
551
17.3.4 Überblick über das Initialisierungscodesegment
552
17.4 Zusammenfassung
554
Register
555
© 2009-2024 ciando GmbH