EN · DE · RU · FR · ES

#2789: AbstractAjaxCallback.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallback.java Абстрактное поведение Wicket (базовый класс для Ajax-обработчиков FullCalendar) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/callback/AbstractAjaxCallback.java 65 строк · 18 кода · 37 комментариев · 10 пустых
Абстрактный базовый класс для всех Ajax-обработчиков FullCalendar. Расширяет AbstractDefaultAjaxBehavior из Wicket и предоставляет ключевой механизм манипуляции URL/скриптами: он добавляет плейсхолдер (<PLACEHOLDER>) как к URL обратного вызова, так и к скрипту обратного вызова. Конкретные подклассы заменяют этот плейсхолдер данными, специфичными для события (например, ID событий, UUID источников или диапазоны дат) через абстрактный метод configureCallbackScript. Это позволяет создавать динамически генерируемые скрипты обратного вызова, которые встраивают идентификаторы событий непосредственно в тело JavaScript-функции, а не полагаются на стандартный механизм передачи параметров Wicket. Такой подход необходим, поскольку FullCalendar вызывает эти обработчики, используя собственные соглашения по аргументам.

Архитектура

Шаблон с плейсхолдером

Основная идея: Wicket генерирует URL обратного вызова вида /wicket/page?3-1.IBehaviorListener.0-calendar<PLACEHOLDER> и скрипт обратного вызова вида function() { Wicket.Ajax.ajax({'u':'...<PLACEHOLDER>'}) }. Метод configureCallbackScript(String script, String urlTail) (реализуемый подклассами) заменяет <PLACEHOLDER> в скрипте на логику, соответствующую FullCalendar, а параметр urlTail (полный URL с плейсхолдером) — на соответствующим образом модифицированный URL.

Плейсхолдер добавляется к getCallbackUrl() через конкатенацию строк — кодирование URL в Wicket сохраняет его буквально. Переопределённый метод getCallbackScript() перехватывает генерацию скрипта Wicket и передаёт как сам скрипт, так и URL с плейсхолдером подклассу для настройки.

Контракт подкласса

Конкретные обработчики должны реализовать configureCallbackScript(String script, String urlTail). Параметр script — это сгенерированный Wicket JavaScript обратного вызова; urlTail — полный URL обратного вызова с добавленным <PLACEHOLDER>. Подклассы заменяют плейсхолдер на специфические для события JavaScript-выражения (например, конкатенацию переменной ID события из аргументов обратного вызова FullCalendar).

Доступ к календарю

Вспомогательный метод getCalendar() приводит getComponent() к типу FullCalendar, предоставляя подклассам доступ к экземпляру календаря, его конфигурации и менеджеру событий. Это используется обработчиками, которым необходимо находить события или изменять состояние календаря.

Видимость на уровне пакета

Класс и его абстрактные методы имеют видимость на уровне пакета — обработчики являются внутренними для пакета callback. Внешний код взаимодействует через шаблонные методы FullCalendar и модель обратного вызова Config, а не напрямую с классами поведения.

История Git

КоммитЧто изменилось
868d6abb7ceb63e8a1Шесть ежегодных обновлений заголовков авторских прав. Шаблон манипуляции URL/скриптами на основе плейсхолдера остаётся стабильным — он инкапсулирует основную задачу интеграции между системой Ajax-поведений Wicket и соглашениями о JavaScript-обработчиках FullCalendar.