EN · DE · RU · FR · ES

#2790: AbstractAjaxCallbackWithClientsideRevert.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallbackWithClientsideRevert.java Abstraktes Wicket-Verhalten (FullCalendar Ajax mit Rückgängig) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallbackWithClientsideRevert.java 82 Zeilen · 35 Code · 33 Kommentare · 14 leer
Ein abstraktes Ajax-Callback-Verhalten für FullCalendar-Interaktionen, die ein clientseitiges Rückgängigmachen bei Fehlschlag benötigen – insbesondere Drag-and-Drop- und Größenänderungsoperationen. Wenn ein Benutzer ein Kalenderereignis zieht oder in der Größe ändert, verschiebt/ändert FullCalendar das Ereignis sofort in der Benutzeroberfläche und sendet einen Ajax-Callback an den Server. Wenn der Server die Änderung ablehnt (z. B. aufgrund eines Terminkonflikts oder einer Verletzung von Geschäftsregeln), sendet dieses Verhalten ein Rückgängig-Skript an den Client, das das Ereignis an seine ursprüngliche Position zurücksetzt. Der Mechanismus verwendet eine Kombination aus Wicket-Ajax-Call-Listenern (onSuccess/onFailure) und einem jQuery-Datenattribut, um die Annahme-/Ablehnungsentscheidung des Servers an die clientseitige Rückgängig-Logik zu kommunizieren.

Architektur

Zwei-Phasen-Commit-Protokoll

FullCalendar implementiert optimistische UI-Updates: Das Ereignis bewegt sich sofort beim Ziehen, und der Server kann es akzeptieren (nichts ändert sich) oder ablehnen (Ereignis kehrt zur ursprünglichen Position zurück). Diese Klasse implementiert die Serverseite dieses Protokolls:

  1. Bei einer Ajax-Anfrage wird onEvent(AjaxRequestTarget) aufgerufen – die Unterklasse implementiert die Geschäftslogik und gibt true (akzeptieren) oder false (ablehnen) zurück
  2. Das Ergebnis wird in einem jQuery-Datenattribut auf dem Dokument gespeichert: $.data(document, '{uuid}', {boolean})
  3. Bei Ajax-Erfolg liest das Erfolgsskript das Datenattribut – bei false wird das Rückgängig-Skript ausgeführt (bereitgestellt durch die abstrakte Methode getRevertScript())
  4. Bei Ajax-Fehlschlag (Netzwerkfehler, Serverausnahme) wird das Rückgängig-Skript immer ausgeführt
  5. Das Datenattribut wird nach der Auswertung bereinigt

UUID-basierter Zustandskanal

Eine zufällige UUID (mit dem Präfix "u") identifiziert die Callback-Instanz. Diese UUID wird als jQuery-Datenschlüssel verwendet, um das boolesche Ergebnis zu speichern. Dies vermeidet globale Zustandskollisionen, wenn mehrere Kalenderinstanzen oder mehrere Callback-Typen auf derselben Seite vorhanden sind. Die UUID wird einmal im Feld-Initialisierer generiert und bleibt für die Lebensdauer des Verhaltens bestehen.

Integration der Ajax-Call-Listener

updateAjaxAttributes() wird überschrieben, um zwei Listener hinzuzufügen:

Vertrag für Unterklassen

Konkrete Unterklassen müssen implementieren:

Git-Verlauf

CommitWas geändert wurde
868d6abb7 bis ceb63e8a1Sechs jährliche Copyright-Header-Updates. Das Zwei-Phasen-Commit-Protokoll und der UUID-basierte Zustandskanal sind stabil – der Mechanismus behandelt FullCalendars optimistisches Update-Muster korrekt und unterscheidet zwischen Ablehnungen aufgrund von Geschäftsregeln (Server gibt false zurück) und Infrastrukturfehlern (Ajax-Fehler löst bedingungsloses Rückgängigmachen aus).