AbstractAjaxCallback.javaAbstractDefaultAjaxBehavior из 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, а не напрямую с классами поведения.
| Коммит | Что изменилось |
|---|---|
868d6abb7 – ceb63e8a1 | Шесть ежегодных обновлений заголовков авторских прав. Шаблон манипуляции URL/скриптами на основе плейсхолдера остаётся стабильным — он инкапсулирует основную задачу интеграции между системой Ajax-поведений Wicket и соглашениями о JavaScript-обработчиках FullCalendar. |