EN · DE · RU · FR · ES

#2772: AjaxCallback.java

projectforge-wicket/src/main/java/de/micromata/wicket/ajax/AjaxCallback.java Java-интерфейс (Micromata Wicket Ajax) · projectforge-wicket/src/main/java/de/micromata/wicket/ajax/AjaxCallback.java 40 строк · 7 кода · 28 комментариев · 5 пустых
Простой функциональный интерфейс (единственный абстрактный метод), определяющий контракт для обработки пользовательских Ajax-вызовов Micromata Wicket. Любой класс, реализующий AjaxCallback, должен предоставить метод callback(AjaxRequestTarget), который получает стандартный объект Wicket AjaxRequestTarget для формирования Ajax-ответов (добавление JavaScript, компонентов для повторного рендеринга и т.д.). Интерфейс расширяет Serializable, что необходимо, так как Wicket может сериализовывать экземпляры обратных вызовов как часть состояния страницы в своём сессионном или дисковом хранилище страниц.

Архитектура

Зачем нужен собственный интерфейс обратного вызова?

Wicket предоставляет собственные механизмы обратного вызова (AbstractDefaultAjaxBehavior, AjaxEventBehavior и др.), но они привязаны к конкретным хукам жизненного цикла компонентов. Команда Micromata создала более простую, независимую абстракцию обратного вызова, которую можно передавать независимо от компонентов Wicket. Этот интерфейс используется такими классами, как MDefaultAjaxBehavior, которые служат мостом между лёгким контрактом обратного вызова и системой поведения/жизненного цикла Wicket.

Связь с AjaxFormSubmitCallback

Сопутствующий интерфейс AjaxFormSubmitCallback (файл #2773) расширяет этот интерфейс, добавляя метод onError для обработки ошибок отправки формы. Это следует шаблону «Команда»: базовый обратный вызов является интерфейсом команды, а вариант для формы добавляет обработку ошибок как специализацию.

История Git

КоммитЧто изменилось
868d6abb7ceb63e8a1Шесть ежегодных обновлений заголовка авторских прав (2001-2021 → 2001-2026). Контракт интерфейса не изменился — только диапазон лет в заголовке файла увеличивался ежегодно. Это один из самых стабильных файлов в модуле wicket.