EN · DE · RU · FR · ES

#2790 : AbstractAjaxCallbackWithClientsideRevert.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallbackWithClientsideRevert.java Comportement Wicket abstrait (FullCalendar Ajax avec revert) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallbackWithClientsideRevert.java 82 lignes · 35 code · 33 commentaires · 14 vides
Un comportement de callback Ajax abstrait pour les interactions FullCalendar nécessitant une réversion côté client en cas d'échec — spécifiquement les opérations de glisser-déposer et de redimensionnement. Lorsqu'un utilisateur glisse ou redimensionne un événement du calendrier, FullCalendar déplace/redimensionne immédiatement l'événement dans l'interface utilisateur et envoie un callback Ajax au serveur. Si le serveur rejette la modification (par exemple, en raison d'un conflit de planning ou d'une violation de règle métier), ce comportement envoie un script de réversion au client qui replace l'événement à sa position d'origine. Le mécanisme utilise une combinaison d'écouteurs de callback Ajax Wicket (onSuccess/onFailure) et d'un attribut de données jQuery pour communiquer la décision d'acceptation/rejet du serveur à la logique de réversion côté client.

Architecture

Protocole de validation en deux phases

FullCalendar implémente des mises à jour optimistes de l'interface utilisateur : l'événement se déplace immédiatement lors du glisser, et le serveur peut accepter (rien ne change) ou rejeter (l'événement revient à sa position d'origine). Cette classe implémente le côté serveur de ce protocole :

  1. Lors de la requête Ajax, onEvent(AjaxRequestTarget) est appelé — la sous-classe implémente la logique métier et retourne true (accepter) ou false (rejeter)
  2. Le résultat est stocké dans un attribut de données jQuery sur le document : $.data(document, '{uuid}', {boolean})
  3. En cas de succès Ajax, le script de succès lit l'attribut de données — s'il est faux, il exécute le script de réversion (fourni par la méthode abstraite getRevertScript())
  4. En cas d'échec Ajax (erreur réseau, exception serveur), le script de réversion s'exécute toujours
  5. L'attribut de données est nettoyé après évaluation

Canal d'état basé sur UUID

Un UUID aléatoire (préfixé par "u") identifie l'instance du callback. Cet UUID est utilisé comme clé de données jQuery pour stocker le résultat booléen. Cela évite les collisions d'état global lorsque plusieurs instances de calendrier ou plusieurs types de callback sont présents sur la même page. L'UUID est généré une fois dans l'initialiseur de champ et persiste pendant toute la durée de vie du comportement.

Intégration des écouteurs de callback Ajax

updateAjaxAttributes() est surchargé pour ajouter deux écouteurs :

Contrat de la sous-classe

Les sous-classes concrètes doivent implémenter :

Historique Git

CommitCe qui a changé
868d6abb7 à ceb63e8a1Six mises à jour annuelles des en-têtes de copyright. Le protocole de validation en deux phases et le canal d'état basé sur UUID sont stables — le mécanisme gère correctement le modèle de mise à jour optimiste de FullCalendar et distingue les rejets de règles métier (le serveur retourne false) des défaillances d'infrastructure (une erreur Ajax déclenche une réversion inconditionnelle).