EN · DE · RU · FR · ES

#2774: MDefaultAjaxBehavior.java

projectforge-wicket/src/main/java/de/micromata/wicket/ajax/MDefaultAjaxBehavior.java Wicket Ajax Behavior (расширение Micromata) · projectforge-wicket/src/main/java/de/micromata/wicket/ajax/MDefaultAjaxBehavior.java 45 строк · 11 кода · 29 комментариев · 5 пустых
Тонкая обёртка вокруг AbstractDefaultAjaxBehavior от Wicket с единственной целью: сделать защищённый метод getCallbackScript() общедоступным. В стандартном API Wicket метод getCallbackScript() является защищённым и может вызываться только внутри логики рендеринга самого поведения. Команде Micromata потребовался доступ к этому методу из внешнего кода связывания обратных вызовов — возможно, для интеграции с FullCalendar или других привязок событий на стороне клиента — и они создали этот подкласс, который просто переопределяет getCallbackScript(), вызывая родительскую реализацию с модификатором public.

Архитектура

Паттерн «Хак с видимостью»

Это классический обходной манёвр с видимостью в Java: когда библиотека (Wicket) делает метод protected, но вам нужно вызвать его извне иерархии наследования, вы создаёте подкласс, который переопределяет метод и повышает его видимость до public. Переопределённый метод ничего не делает, кроме делегирования вызову super.getCallbackScript(). Этот паттерн часто встречается в кодовых базах Wicket, где инкапсуляция фреймворка препятствует определённым шаблонам интеграции.

Зачем это нужно

Метод getCallbackScript() в Wicket генерирует фрагмент JavaScript, который вызывает URL обратного вызова на сервере с правильными параметрами, токенами защиты от кеширования и настройками Ajax. Интеграция с FullCalendar (см. файлы #2786-2790) требует встраивания этих скриптов обратного вызова внутрь JSON-конфигурации FullCalendar, а не прикрепления их в качестве обработчиков событий DOM. Для этого скрипт обратного вызова должен быть извлечён из поведения и интерполирован в другой контекст — что требует публичного доступа к методу генерации скрипта.

Контекст использования

Упоминается в системе обратных вызовов FullCalendar в net.ftlines.wicket.fullcalendar.callback.AbstractAjaxCallback (файл #2789), который также расширяет AbstractDefaultAjaxBehavior и требует манипуляции скриптом обратного вызова для встраивания в обработчики событий календаря.

История Git

КоммитЧто изменилось
868d6abb7ceb63e8a1 Шесть ежегодных обновлений заголовков авторских прав. Сам класс — единственное переопределение метода — никогда не требовал изменений с момента первоначальной миграции версии Wicket. Его назначение настолько узко определено, что изменения в API Wicket, скорее всего, будут поглощены без изменений в этой обёртке.