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 |