Praxisbuch Wicket (eBook)
314 Seiten
Carl Hanser Fachbuchverlag
978-3-446-42141-7 (ISBN)
DER SCHNELLE WEG ZU WEB 2.0
- Erfahren Sie, welch mächtige Unterstützung Wicket Java-Programmierern bei der Entwicklung von Web-2.0-Anwendungen bietet
- Folgen Sie Schritt für Schritt den praxisnahen Beispielen und erleben Sie, wie eine Anwendung mit Wicket entsteht.
- Nutzen Sie die praxiserprobten Lösungen dafür, die Entwicklung Ihrer Anwendungen zu vereinfachen und zu beschleunigen.
- Im Internet, Laufend aktuelle Informationen zu Wicket finden Sie auf der Website zu diesem Buch wicket-praxis.de
Wicket ist ein mächtiges Framework für die Entwicklung von Web-2.0-Anwendungen, die auf Java basieren. Es bietet eine einfache Integration von AJAX, ohne dass Sie sich mit XML oder JavaScript auseinandersetzen müssen, und erleichtert Ihnen die Wiederverwendung, weil es konsequent komponentenorientiert arbeitet.
In diesem Buch erfahren Sie, wie Wicket Sie bei der Entwicklung von Web-2.0-Anwendungen unterstützt und welche Vorteile es bietet. Der Autor entwickelt gemeinsam mit Ihnen eine komplette Anwendung, erklärt unterwegs die wesentlichen Konzepte von Wicket und zeigt elegante, praxiserprobte Lösungen u.a. für Aufgabenstellungen wie suchmaschinenoptimierte Seiten oder Applikationen mit Desktop-Charakter.
Das umfangreiche Kapitel "Wicket in der Praxis" bietet Ihnen eine Reihe von effektiven Lösungsvorschlägen für typische Aufgabenstellungen.
Inhalt 8
Vorwort 14
1 Einleitung 16
1.1 Warum Wicket? 18
1.1.1 Einfach, Konsistent, Offensichtlich 19
1.1.2 Wiederverwendbarkeit 19
1.1.3 Sauber getrennt 20
1.1.4 Sicher 20
1.1.5 Effizient und skalierbar 21
1.1.6 Komplett 21
1.1.7 Eine gute Wahl 21
1.2 Vorbereitung und Installation 22
1.2.1 Java, Maven und Eclipse 22
1.2.2 Versionskontrolle mit Subversion 22
1.3 Grundlagen einer Webanwendung 23
1.3.1 Anwendungsschichten 23
1.3.2 Verzeichnis und Paketstruktur 26
1.3.3 Unit-Tests 27
2 Aufsetzen der Teilprojekte 30
2.1 Nomenklatur der Teilprojekte 30
2.2 Aufsetzen der Teilprojekte 31
2.2.1 Projektbasis ParentPom 31
2.2.2 Teilprojekt Base 35
2.2.3 Teilprojekte Datenbankkonfiguration 35
2.2.4 Teilprojekt Persistenz 37
2.2.5 Teilprojekt Applikationsschicht 39
2.2.6 Teilprojekt Webapp 39
2.2.7 Teilprojekt ParentPom – Abschluss 41
2.3 Erstellen von Eclipse-Projektdateien 42
3 Mit Leben füllen 44
3.1 Konfiguration mit Spring 44
3.2 Datenbankkonfiguration 45
3.2.1 Teilprojekt dbconfig 45
3.2.2 Teilprojekt dbconfig-test 46
3.2.3 Teilprojekt dbconfig-schema-update 46
3.2.4 Schemagenerierung mit Hibernate 47
3.3 Persistenz 48
3.3.1 Datenbankzugriff – Allgemeine Schnittstellendefinition 48
3.3.2 Datenbankzugriff – Hilfsklassen 49
3.3.3 Datenbankzugriff – User 50
3.3.4 Datenbankzugriff – Konfiguration 52
3.3.5 Persistenz-Tests 53
3.3.6 Schema-Update 55
3.4 Anwendungsschicht 56
3.5 Präsentationsschicht 56
3.5.1 Hilfsklasse für Maven-Projekte 56
3.5.2 Wicket Web Application 57
3.5.3 Servlet-Konfiguration 59
3.5.4 Spring-Konfiguration 61
3.5.5 Start der Anwendung 61
4 Die Wicket-Architektur 64
4.1 Wicket und das HTTP-Protokoll 64
4.2 Struktur 64
4.2.1 WebApplication 65
4.2.2 Session 65
4.2.3 PageMap 65
4.2.4 Page 65
4.2.5 PageStore 66
4.2.6 Component 66
4.3 Request-Behandlung 66
4.3.1 Komponentenphasen 67
4.3.2 Nebenläufigkeit – Threads 67
4.4 Komponenten, Modelle, Markup 68
4.4.1 Komponenten 68
4.4.2 Modelle 68
4.4.3 Markup 68
5 Modelle 70
5.1 Konverter 70
5.2 Einfache Modelle 72
5.2.1 Modelle verändern 73
5.3 Modell-Hilfsklassen 75
5.4 Modelle und Serialisierung 76
5.4.1 DetachableModel – Dynamische Modelldaten 76
5.4.2 Kaskadierung von Modellen 77
5.4.3 Automatische Kaskadierung von Modellen 80
5.4.4 Datenbankzugriffsmodelle 81
5.5 Komplexe Modellklassen 84
5.5.1 Zugriff auf Bean-Properties 84
5.5.2 Die Klasse PropertyModel 87
5.5.3 CompoundPropertyModel 89
5.6 Ausgelagerte Informationen 91
5.6.1 Einfacher Zugriff auf Ressourcen 91
5.6.2 ResourceModel 91
5.6.3 StringResourceModel 93
6 Komponenten 96
6.1 Basisklasse Component 96
6.1.1 Komponentenbaum 96
6.1.2 Darstellungsphasen 98
6.1.3 Page, Session und Application 99
6.1.4 Komponentenpfad 99
6.1.5 Modelle 99
6.1.6 Feedback 100
6.2 Grundlagen der Vererbung 100
6.2.1 Eine Seite mit eigenen Komponenten 100
6.2.2 Vererbung für Fortgeschrittene 106
6.3 Style, Locale und Variation 109
6.3.1 Markup-Variationen 109
6.4 Sichtbarkeit 114
6.4.1 wicket:enclosure 115
6.4.2 Empfehlung zur Anwendung 116
6.5 Ajax 117
6.5.1 Ajax-Events 118
6.5.2 Einfache Event-Behandlung 119
6.5.3 Automatische Event-Behandlung 120
7 Basiskomponenten 124
7.1 Gruppierende Komponenten 124
7.1.1 Seiten 124
7.1.2 Panel 132
7.1.3 Fragment 134
7.1.4 Border 135
7.1.5 ComponentBorder 140
7.1.6 WebMarkupContainer 141
7.2 Inhaltselemente 142
7.2.1 Label und MultiLineLabel 142
7.2.2 Lokaler Konverter 144
7.2.3 XML 145
7.2.4 Das wicket:message-Tag 146
7.2.5 Image 147
7.3 Links 152
7.3.1 Von A nach B 152
7.3.2 Ajax und Links 153
7.3.3 Link-Tricks 155
7.3.4 Externe Links 156
7.3.5 Popups 156
7.3.6 ResourceLink 158
7.3.7 Formularlinks 159
7.4 Behavior 159
7.4.1 Darf es etwas JavaScript sein? 159
7.4.2 Attribute anpassen 160
7.4.3 Attribute erweitern 162
7.4.4 Ajax und Formulare 163
8 Listen und Tabellen 164
8.1 Darstellung von Listen 164
8.1.1 RepeatingView 164
8.1.2 RefreshingView 165
8.1.3 ListView 167
8.1.4 PropertyListView 168
8.1.5 ColumnListView 169
8.2 DataProvider 171
8.2.1 DataView 171
8.2.2 GridView 173
8.2.3 DataGridView 174
8.2.4 DataTable 176
8.2.5 DefaultDataTable 177
9 Formulare 184
9.1 Voraussetzungen 184
9.2 Feedback 185
9.3 Basisklasse für alle Beispiele 186
9.4 Formulare absenden 187
9.4.1 Absenden mit Submit-Button 187
9.4.2 Button-Komponente 188
9.4.3 Submit per Ajax 189
9.4.4 POST und GET 190
9.5 Textfelder 191
9.5.1 Typangabe 193
9.5.2 Automatische Typermittlung 194
9.6 Label 196
9.7 CheckBox 197
9.8 RadioButton 200
9.9 Auswahlfelder 201
9.9.1 Select 201
9.9.2 DropDownChoice 203
9.9.3 ListMultipleChoice 205
9.10 Dateien hochladen 207
9.10.1 FileUpload 207
9.10.2 MultiFileUpload 209
9.11 Gültigkeitsprüfung 210
9.11.1 StringValidator 211
9.11.2 Minimum und Maximum 212
9.11.3 E-Mail 212
9.11.4 URL 214
9.11.5 Eigene Validatoren 214
9.12 FormValidator 216
9.12.1 Passwortprüfung 216
9.12.2 Eigene Prüfung 218
9.13 Ajax 220
9.13.1 AjaxFormSubmitBehavior 220
9.13.2 AjaxFormValidatingBehavior 222
9.13.3 AjaxComponentUpdatingBehavior 222
9.13.4 OnChangeBehavior 224
9.13.5 AutoCompleteTextField 225
9.14 AjaxEditableLabel 227
9.15 Erweitertes Feedback 229
9.15.1 Feedback zum Formular 229
9.15.2 Feedback für die Komponente 230
9.15.3 Feedback als Rahmen 231
9.15.4 Feedback als Indikator 232
9.15.5 Feedback per CSS 233
9.16 Generierte Formulare 235
9.17 Verschachtelte Formulare 237
10 Sessions und Security 240
10.1 Einfache Variante 240
10.1.1 Eine eigene Session-Klasse 240
10.1.2 Geschützte Seiten 241
10.1.3 Strategie 241
10.1.4 WebApplication 242
10.1.5 Seiten 243
10.2 Marker an Komponenten 246
10.3 Elemente ausblenden 248
11 Wicket in der Praxis 250
11.1 Die Integration von Spring 250
11.2 Navigation 252
11.3 CSS einbinden 259
11.4 Eigene Basiskomponenten 265
11.5 Komponententausch 268
11.5.1 AjaxFallbackConfirmLink 269
11.5.2 Wizard 271
11.6 Suchmaschinenoptimierung 273
11.6.1 Pfad für BookmarkablePages 273
11.6.2 SessionTimeoutPage 277
11.6.3 SEO-Links 279
11.6.4 Servlet-Filter 283
11.6.5 Tracking mit Google Analytics 286
11.7 Ressourcen 289
11.7.1 Dynamisch erzeugte Grafiken 289
11.7.2 Automatisch generierte Thumbnails 291
11.7.3 Download durch Formular 292
11.7.4 Shared Resources 293
11.7.5 RSS-Feed 295
11.8 Links auf Seiten und Ressourcen 297
11.9 Optimierungen 299
11.9.1 Applikation 299
11.9.2 Konverter 299
11.9.3 Debug 299
11.9.4 Ressource 300
12 Fehlersuche 302
12.1 Häufige Fehlerquellen 302
12.1.1 Komponenten fehlen 302
12.1.2 Komponente ist bereits vorhanden 302
12.1.3 Ajax funktioniert nicht 303
12.2 Unit-Tests 303
13 Anfang oder Ende? 308
Register 310
12 Fehlersuche (S. 287-288)
Normalerweise gestaltet sich die Fehlersuche in Wicket-Anwendungen relativ einfach. Wenn der Code kompiliert werden konnte, ist man meistens schon fast am Ziel. Wie man die letzten Klippen umschifft und bei Fehlern schnell auf deren Ursache kommt, ist Ziel des folgenden Kapitels. Häufige Fehlerquellen Wicket bietet wenig Spielraum für schwer zu lokalisierende Fehler. Das bedeutet aber nicht, dass man nicht auch mit Wicket Fehler machen kann. Die folgenden Fehlerquellen sollte man Hinterkopf haben, damit die Suche kurz bleibt.
12.1.1 Komponenten fehlen
Die häufigsten Fehlerquellen sind Abweichungen zwischen dem Komponentenbaum und den Referenzen im Markup. Das erklärt sich recht einfach: Wenn der Code kompiliert werden konnte, konnte man eine große Fehlerquelle erfolgreich ausschließen. Jetzt kann es aber vorkommen, dass man vergessen hat, eine Komponente im Markup zu referenzieren. Oder man hat eine Komponente im Markup referenziert, die es an der Stelle nicht gibt. Für beide Fälle gibt Wicket passende Fehlermeldungen aus, die man sich genau durchlesen sollte. Wenn Wicket behauptet, dass man eine Komponente referenziert, die im Komponentenbaum nicht vorkommt, ist es auch nicht unwahrscheinlich, dass man die Komponente zwar erstellt, aber nicht mit add() hinzugefügt hat.
12.1.2 Komponente ist bereits vorhanden
Es gibt verschiedene Situationen, die dazu führen können, dass Wicket der Meinung ist, dass es eine Komponente mit dieser ID schon gibt. Dazu muss man Folgendes beachten: Während man mit add() Komponenten hinzufügt, wird schon geprüft, ob es in der aktuel len Hierarchieebene bereits eine Komponente mit der gleichen ID gibt. Es ist zu diesem Zeitpunkt irrelevant, ob diese Komponente im Markup überhaupt referenziert wird. Im einfachsten Fall hat man wirklich eine Komponente mit der ID bereits hinzugefügt. Spannender wird es, wenn man eine Komponente hinzufügt und sich sicher ist, dass es diese ID noch nicht gibt.
Das kann besonders bei Border-Komponenten auftreten, da sich die internen Komponenten auf derselben Hierarchieebene befinden. Der komplizierteste Fall ist gleichzeitig der häufigste. Wenn man mal das Muster erkannt hat, dann findet man auch diesen Fehler recht schnell. In einer ListView fügt man die Komponente fälschlicherweise nicht zum ListItem-, sondern zur ListView-Komponente hinzu (statt item.add() schreibt man nur add()). Das bedeutet, dass bei einer Listenlänge von mindestens zwei (was häufig der Fall ist) Wicket die Fehlermeldung ausgibt, dass es eine Komponente mit dieser ID bereits gibt. Man sollte der Versuchung widerstehen und prüfen, ob man eine ID doppelt vergeben hat, sondern dazu übergehen, in der entsprechenden Methode zu prüfen, ob man die Komponenten an das ListItem und nicht an die ListView gehängt hat.
12.1.3 Ajax funktioniert nicht
Dass Ajax nicht funktioniert, liegt am häufigsten daran, dass es kein geeignetes HTMLTag gibt, an das die per Ajax zu aktualisierende Komponente gebunden ist. Die Verwendung von wicket:container anstelle eines div-Tags kann dazu führen, dass der Java- Script-Aufruf zum Tauschen des Inhalts kein passendes HTML-Tag finden kann. In den meisten anderen Fällen gibt Wicket entsprechende Fehlermeldungen aus.
Erscheint lt. Verlag | 1.1.2009 |
---|---|
Sprache | deutsch |
Themenwelt | Informatik ► Programmiersprachen / -werkzeuge ► Java |
Informatik ► Web / Internet ► Web Design / Usability | |
ISBN-10 | 3-446-42141-6 / 3446421416 |
ISBN-13 | 978-3-446-42141-7 / 9783446421417 |
Haben Sie eine Frage zum Produkt? |
![PDF](/img/icon_pdf_big.jpg)
Größe: 2,7 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich