Я столкнулся со странной проблемой с управляемыми бобами. Иногда, когда я перемещаюсь от одной страницы к другой, 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 после загрузки страницы.