EN · DE · RU · FR · ES

#2790: AbstractAjaxCallbackWithClientsideRevert.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallbackWithClientsideRevert.java Comportamiento abstracto de Wicket (FullCalendar Ajax con Reversión) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallbackWithClientsideRevert.java 82 líneas · 35 código · 33 comentarios · 14 en blanco
Un comportamiento de devolución de llamada Ajax abstracto para interacciones de FullCalendar que necesitan reversión del lado del cliente en caso de fallo — específicamente operaciones de arrastrar y soltar y redimensionar. Cuando un usuario arrastra o redimensiona un evento del calendario, FullCalendar mueve/redimensiona inmediatamente el evento en la interfaz de usuario y envía una devolución de llamada Ajax al servidor. Si el servidor rechaza el cambio (por ejemplo, debido a un conflicto de programación o una violación de regla de negocio), este comportamiento envía un script de reversión de vuelta al cliente que devuelve el evento a su posición original. El mecanismo utiliza una combinación de oyentes de llamada Ajax de Wicket (onSuccess/onFailure) y un atributo de datos jQuery para comunicar la decisión de aceptación/rechazo del servidor a la lógica de reversión del lado del cliente.

Arquitectura

Protocolo de confirmación en dos fases

FullCalendar implementa actualizaciones optimistas de la interfaz de usuario: el evento se mueve inmediatamente al arrastrar, y el servidor puede aceptar (nada cambia) o rechazar (el evento vuelve a su posición original). Esta clase implementa la parte del servidor de ese protocolo:

  1. En la solicitud Ajax, se llama a onEvent(AjaxRequestTarget) — la subclase implementa la lógica de negocio y devuelve true (aceptar) o false (rechazar)
  2. El resultado se almacena en un atributo de datos jQuery en el documento: $.data(document, '{uuid}', {boolean})
  3. En caso de éxito de Ajax, el script de éxito lee el atributo de datos — si es falso, ejecuta el script de reversión (proporcionado por el método abstracto getRevertScript())
  4. En caso de fallo de Ajax (error de red, excepción del servidor), el script de reversión siempre se ejecuta
  5. El atributo de datos se limpia después de la evaluación

Canal de estado basado en UUID

Un UUID aleatorio (prefijado con "u") identifica la instancia de devolución de llamada. Este UUID se utiliza como clave de datos jQuery para almacenar el resultado booleano. Esto evita colisiones de estado global cuando hay múltiples instancias de calendario o múltiples tipos de devolución de llamada en la misma página. El UUID se genera una vez en el inicializador de campo y persiste durante la vida útil del comportamiento.

Integración del oyente de llamada Ajax

updateAjaxAttributes() se sobrescribe para añadir dos oyentes:

Contrato de subclase

Las subclases concretas deben implementar:

Historial de Git

CommitQué cambió
868d6abb7 a ceb63e8a1Seis actualizaciones anuales del encabezado de derechos de autor. El protocolo de confirmación en dos fases y el canal de estado basado en UUID han sido estables — el mecanismo maneja correctamente el patrón de actualización optimista de FullCalendar y distingue entre rechazos por reglas de negocio (el servidor devuelve falso) y fallos de infraestructura (el error Ajax desencadena una reversión incondicional).