Управляемый компонент создается снова после того, как я покинул страницу - PullRequest
0 голосов
/ 15 марта 2011

Я столкнулся со странной проблемой с управляемыми бобами. Иногда, когда я перемещаюсь от одной страницы к другой, bean-компонент с первой страницы создается снова после загрузки второй страницы (к этому времени он даже отображается в браузере). Я не могу понять, почему это происходит, потому что нет никаких ссылок на первый бин со второй страницы. Обе страницы доступны из меню, но есть также варианты навигации для загрузки одной страницы с другой.
Эта ошибка всегда появляется, когда я сначала загружаю вторую страницу, затем захожу через меню на первую страницу и затем вызываю действие firstBean, которое перенаправляет меня на вторую страницу. Но это также иногда появляется в случае, когда первая страница загружается первой.

Может быть, в какой-то схеме это будет более понятным.

firstBean = firsPage
secondBean = secondPage

В этом сценарии:
Меню -> Вторая страница -> Меню -> Первая страница -> Вторая страница
- firstBean всегда создается после загрузки secondPage

Но по другому сценарию:
меню -> первая страница -> вторая страница
- firstBean иногда создается после загрузки secondPage, а иногда нет (я полагаю, это происходит не только тогда, когда я делаю это в первый раз :))

Опять же: нет ссылок на firstBean из secondPage или secondBean.

Итак, почему firstBean создается после загрузки secondPage?


UPDATE
Забыл упомянуть: firstBean не только создан (это не было бы проблемой), но и считывает данные для <rich:extendedDataTable>! Вот что странно! Почему он читает данные для таблицы, которая не отображается? Он не существует вообще на secondPage.


ОБНОВЛЕНИЕ 2
Я использую <a4j:keepAlive> с ajaxOnly="true".


ОБНОВЛЕНИЕ 3

Вот распечатка вызовов методов, включая фазы.
Я нахожусь на странице "Сети" и нажимаю пункт меню "Типы событий":
START PHASE RESTORE_VIEW 1<br> END PHASE RESTORE_VIEW 1<br> START PHASE APPLY_REQUEST_VALUES 2<br> class ui.network.MbNetworks getFilter: net.Network@ae8a2c<br> MbNetworks <init>: constructed 2011-03-16 18:13:23,860<br> class ui.network.MbNetworks getTabName: detailsTab<br> Menu processSelection: Pressed menu<br> END PHASE APPLY_REQUEST_VALUES 2<br> START PHASE PROCESS_VALIDATIONS 3<br> END PHASE PROCESS_VALIDATIONS 3<br> START PHASE UPDATE_MODEL_VALUES 4<br> END PHASE UPDATE_MODEL_VALUES 4<br> START PHASE INVOKE_APPLICATION 5<br> END PHASE INVOKE_APPLICATION 5<br> START PHASE RENDER_RESPONSE 6<br> MbEventTypes <init>: constructed 2011-03-16 18:13:23,969<br> class ui.common.events.MbEventTypes getEventTypesItems: [javax.faces.model.SelectItem@197889e, ...]<br> class ui.common.events.MbEventTypes getFilter: common.events.EventType@bab853<br> class ui.common.events.MbEventTypes getEntityTypes: [javax.faces.model.SelectItem@9b80b4, ...]<br> class ui.common.events.MbEventTypes getFilter: common.events.EventType@bab853<br> class ui.common.events.MbEventTypes access$0: Data size<br> class ui.common.events.MbEventTypes getRowsNum: 20<br> class ui.common.events.MbEventTypes access$0: Data<br> class ui.common.events.MbEventTypes getItemSelection: null<br> class ui.common.events.MbEventTypes getRowsNum: 20<br> class ui.common.events.MbEventTypes getRowsNum: 20<br> class ui.common.events.MbEventTypes getRowsNum: 20<br> class ui.common.events.MbEventTypes getActiveEventType: null<br> class ui.common.events.MbEventTypes getActiveEventType: null<br> class ui.common.events.MbEventTypes getEventTypesItems: [javax.faces.model.SelectItem@1dfab16, ...]<br> class ui.common.events.MbEventTypes getNewEventType: common.events.EventType@1f84cb0<br> class ui.common.events.MbEventTypes getEntityTypes: [javax.faces.model.SelectItem@154953, ...]<br> class ui.common.events.MbEventTypes getNewEventType: common.events.EventType@1f84cb0<br> class ui.common.events.MbEventTypes getRowsNum: 20<br> END PHASE RENDER_RESPONSE 6<br> START PHASE RESTORE_VIEW 1<br> END PHASE RESTORE_VIEW 1<br> START PHASE RENDER_RESPONSE 6<br> class ui.network.MbNetworks getFilter: net.Network@65f126
К этому времени форма «Типы событий» полностью загружена, я вижу страницу, браузер больше не ждет данных. Там вы уже можете увидеть одну странную вещь: называется getFilter MbNetworks. Более того, моя точка останова стоит на первой строчке конструктора MbNetworks. Метод вызывается до инициализации bean-компонента? Ну, может быть, это просто ошибка Eclipse. В любом случае странные вещи продолжаются: каждый получатель MbNetworks называется. (помните, что страница «Сети» отсутствует, я нахожусь на странице «Типы событий», которая не имеет ничего общего с сетями)
MbNetworks <init>: constructed 2011-03-16 18:14:01,156<br> class ui.network.MbNetworks getFilter: net.Network@65f126<br> class ui.network.MbNetworks getInstitutions: [javax.faces.model.SelectItem@160ac3e, ...]<br> class ui.network.MbNetworks getFilter: net.Network@65f126<br> class ui.network.MbNetworks access$3: Data size<br> class ui.network.MbNetworks getRowsNum: 20<br> class ui.network.MbNetworks access$3: Data<br> class ui.network.MbNetworks getItemSelection: null<br> class ui.network.MbNetworks getRowsNum: 20<br> class ui.network.MbNetworks getRowsNum: 20<br> class ui.network.MbNetworks getRowsNum: 20<br> class ui.network.MbNetworks getActiveNetwork: null<br> class ui.network.MbNetworks getActiveNetwork: null<br> class ui.network.MbNetworks getTabName: detailsTab<br> class ui.network.MbNetworks getTabName: detailsTab<br> class ui.network.MbNetworks getLanguages: [javax.faces.model.SelectItem@130a65, javax.faces.model.SelectItem@f9d23]<br> class ui.network.MbNetworks getActiveNetwork: null<br> ...<br> class ui.network.MbNetworks getActiveNetwork: null<br> class ui.network.MbNetworks getLanguages: [javax.faces.model.SelectItem@130a65, javax.faces.model.SelectItem@f9d23]<br> class ui.network.MbNetworks getNewNetwork: net.Network@5d0f3<br> class ui.network.MbNetworks getInstitutions: [javax.faces.model.SelectItem@160ac3e, ...]<br> class ui.network.MbNetworks getNewNetwork: net.Network@5d0f3<br> ...<br> class ui.network.MbNetworks getNewNetwork: net.Network@5d0f3<br> class ui.network.MbNetworks getRowsNum: 20<br> END PHASE RENDER_RESPONSE 6

Кстати, (для комментария BalusC) в Firebug нет запроса AJAX после загрузки страницы.

...