Как сделать компонент калитки, который будет перерисовываться при каждом запросе AJAX к странице? - PullRequest
0 голосов
/ 08 апреля 2011

Есть ли способ заставить компонент Wicket перерисовывать себя при каждом запросе AJAX к странице? (По существу, чтобы делать то, что ajaxRendered="true" делает в RichFaces.)

Мое приложение в основном состоит из следующего:

  • Редактируемая запись в сетку данных об изменениях, которые делает пользователь
  • Эти изменения сохраняются в сеансе
  • Существуют кнопки для сохранения или отмены изменений.

Кнопки сохранения и отмены должны быть включены или отключены в зависимости от того, есть ли записанные изменения или нет. Поскольку есть несколько способов ввода изменений (редактирование, импорт CSV и т. Д.), Я хочу избежать перехвата каждого действия, которое может изменить сохраненное состояние.

Кроме того, кнопки отображаются только на некоторых страницах, поэтому я не хочу, чтобы их нюхали на странице в пользовательском WebRequestCycle.

Есть ли ловушка, которую вызывает Wicket, когда собирается обрабатываться AJAX-запрос, который вызывается для каждого компонента на странице? Я знаю, что есть Component#onBeforeRender() и Component#onConfigure(), но в документации для них не указано, когда они вызваны для запросов AJAX.

Ответы [ 2 ]

9 голосов
/ 08 апреля 2011

В Wicket 1.5 есть шина событий.Для каждого запроса Ajax событие отправляется каждому компоненту, и компонент может использовать AjaxRequestTarget, чтобы добавить себя для повторного рендеринга.

Например:

class MyComponent ... {

 public void onEvent(Object payload) {

   if (payload instanceod AjaxRequestTarget) {
     ((AjaxRequestTarget) payload).add(this);
   }
 } 
2 голосов
/ 08 апреля 2011

У меня была похожая проблема, и я подумал о двух возможных решениях, из которых я использовал второе.

  1. Вызовите метод на своей странице в Ajax-Handler, который, в свою очередь,вызывает посетителя, чтобы найти все дочерние элементы, которые необходимо перерисовать, добавляя их к цели.

  2. Вариант шаблона наблюдателя ... Мои компоненты зарегистрировались как wantToUpdate настраницу и вызвал функцию, добавив их всех в Requesttarget в моем Ajax-обработчике.Я не мог использовать шаблон наблюдателя из коробки, так как мои компоненты не знают друг друга, и я не хотел вводить этот тип связи.

...