(5.4-beta-6) Обработчик события зоны не вызывается

1

Насколько я понимаю, Zone - это компонент, и я могу обрабатывать его события.

Поэтому я набираю следующий код:

@InjectComponent
private Zone zoneSample;
@OnEvent(component = "zoneSample")
private void zoneEvent() {
    System.out.println(String.format("Zone client id: %s", zoneSample.getClientId()));
}

Исключение не выбрасывается, поэтому идентификатор зоны установлен правильно. Но это событие не уволено! Должен ли этот метод обработки событий соответствовать всем событиям для зоны?

Я ожидал, что он будет запущен в основном раньше, пока и после рендеринга зоны, потому что мне нужно увидеть, могу ли я получить сгенерированный идентификатор клиента зоны, чтобы использовать его, чтобы показать эту зону позже, используя класс AjaxResponseRenderer.

Теги:
tapestry

1 ответ

4
Лучший ответ

В зоне нет событий. Там есть удобный микс, который может помочь вам в этом сценарии, микшер RenderNotification.

Он предоставляет два события: beginRender и afterRender, я думаю, что все, что вам нужно. После применения mixin к зоне код для обработки событий будет выглядеть примерно так:

void onBeginRenderFromZoneSample(MarkupWriter writer)
{
    ...
}

void onAfterRenderFromZoneSample(MarkupWriter writer)
{
    ...
}
  • 1
    То есть у компонента есть фаза рендеринга, но он должен запускать свои собственные события?
  • 2
    Да, и большинство компонентов не вызывают эти события, поэтому миксин RenderNotification так полезен. Я обычно смотрю на верхнюю часть каждого компонента, чтобы увидеть, какие события он может вызывать (они определяются с помощью аннотации @Events, которая предназначена только для целей документации).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню