Nun erhält handleGetAllTasks ein Array von Task-Objekten (alltasks) und verwendet zwei Funktionen von DWRUtil zur Bearbeitung der Tabelle. Die erste Funktion (removeAllRows) sucht nach einer Tabelle mit der entsprechenden ID und entfernt dann alle Zeilen daraus. Die zweite Funktion (addRows) ist etwas komplizierter. Auch sie sucht nach einer Tabelle mit der entsprechenden ID und beginnt damit, diese zu füllen, indem sie die Werte im Array alltasks der Reihe nach abarbeitet. Für jede Spalte der Zeile ruft sie die entsprechende Funktion aus diesem Array mit Funktionen auf, welche der letzte Parameter ist. Die Funktion getName zum Beispiel ist einfach wie folgt definiert:
Sie gibt einfach den Namen des Tasks als String zurück. Aber man kann von den Funktionen auch HTML zurückgeben lassen. Die Funktion getId gibt einen HTML-String für einen Button zurück, der die Funktion editTask mit der taskId aufruft, wenn er angeklickt wird:
Hier ein Blick auf diese editTask-Funktion. Diese ruft TasksSession.getTask auf, um den entsprechenden Eintrag abzurufen, und ruft gotTask auf, wenn ein Ergebnis vorliegt.
gotTask nimmt das Ergebnis, konvertiert die Datumsfelder in Strings (damit man leichter damit arbeiten kann, denn DWR ist etwas zu schlau und konvertiert Javas unhandlichen Datumstyp in den noch sperrigeren Datumstyp von Javascript) und dann wird noch einmal DWRUtil.setValues aufgerufen, dieses Mal mit dem zurückgegebenen Task. Die DWR-Konvertierung wandelt den Task in eine Reihe von Javascript-Eigenschaften um, so dass die entsprechenden Felder mit den Werten gefüllt werden, wenn setValues aufgerufen wird.
Wenn ein Eintrag gespeichert oder aktualisiert wird, findet dieser Vorgang in umgekehrter Richtung statt: DWRUtil.getValues verwendet die Eigenschaften-Namen eines Javascript-Objekts, sucht nach Elementen mit denselben IDs wie die Namen, extrahiert den entsprechenden Wert des Elements und weist ihn der Eigenschaft zu.
Man beachte, wie die Daten von Strings wieder zurück in Javascript-Daten konvertiert werden, ehe TasksSession.updateTask verwendet wird, um die Änderungen zu speichern. Wieder im Java-Code von TasksSessions finden sich folgende Zeilen:
Dabei wird eine Java Task-Instanz als Parameter übergeben, bei der sich wieder DWR um die Konvertierung kümmert.
Damit hat sich der Kreis geschlossen: vom Server über das Formular und die Bearbeitung bis zum Speichern, ohne dass die Seite erneut geladen werden musste. Die gespeicherten Änderungen kann man sich auch unmittelbare in der Swing-Oberfläche der Anwendung anzeigen lassen. Und für alle, die es ganz genau wissen wollen: Ein ähnlicher Zyklus im Code findet statt, wenn man die Sortierreihenfolge ändert, obwohl dieser Wert nur vorübergehend von TasksSession gespeichert wird und nicht dauerhaft auf dem Server.
Wie man sieht, vereinfacht DWR den gesamten Prozess deutlich, Java und Javascript zur Zusammenarbeit zu bewegen. Am besten aber ist, dass es sich in eine Reihe weiterer Frameworks integrieren lässt, statt dem Entwickler sein eigenes Framework aufzuzwingen. Daher war es einfach, DWR in das ToDoTasks-Beispielprojekt zu integrieren.
Den Quellcode für dieses Tutorial gibt es als Download.
Die vorangegangenen Artikel:
Datenpersistenz bei Java-Applikationen
Java-Applikationen für Web-fähige Anwendungen
Mit dem Dekryptor von Bitdefender können Opfer von Attacken mit der Shrinklocker-Ransomware Dateien wiederherstellen.
In der Vorweihnachtszeit ist vor allem Malvertising auf dem Vormarsch. Cyberkriminelle locken Nutzer über schädliche…
Dazu trägt unter der Infostealer Lumma-Stealer bei. Hierzulande dominiert der Infostealer Formbook die Malware-Landschaft.
Eine schwerwiegende Anfälligkeit hebelt die Sicherheitsfunktion Seitenisolierung auf. Betroffen sind Chrome für Windows, macOS und…
DeepL Voice ermöglicht Live‑Übersetzung von Meetings und Gesprächen in 13 Sprachen.
Betroffen sind Windows und Windows Server. Microsoft patcht aber auch Schwachstellen in Excel, Word und…