我离开页面后再次构建托管bean

时间:2011-03-15 14:41:00

标签: jsf richfaces

我遇到了托管bean的一个奇怪问题。有时当我从一个页面导航到另一个页面时,在第二页加载后再次构建来自第一页的bean(此时它甚至在浏览器中呈现)。我无法理解为什么会发生这种情况,因为第二页没有任何对第一个bean的引用。这两个页面都可以从菜单访问,但也有导航案例从一个页面加载另一个页面 当我首先加载第二页,然后通过菜单转到第一页然后调用firstBean将我转发到第二页的操作时,总会出现此错误。但有时也会出现首次加载第一页的情况。

可能会在一些原理图中更清楚。

firstBean =第一页 secondBean = secondPage

在这种情况下:
菜单 - >第二页 - >菜单 - > firstPage - > secondPage
- firstBean始终在第二页加载后构建

但在另一种情况下:
菜单 - > firstPage - > secondPage
- firstBean有时在第二页加载后构建,有时不加载(我想它不会发生,只有当我第一次这样做:))

再次:没有从secondPage或secondBean引用firstBean。

那么,为什么在加载第二页后构造firstBean?


UPDATE
忘记提及:firstBean不仅构造(这不会有问题),而且还读取<rich:extendedDataTable>的数据!这就是奇怪的!为什么它会读取未呈现的表的数据?它在secondPage上根本不存在。


更新2
我将<a4j:keepAlive>ajaxOnly="true"一起使用。


更新3

这是方法调用的打印,包括阶段 我在“网络”页面上,按“事件类型”菜单项:
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
class ui.network.MbNetworks getFilter: net.Network@ae8a2c
MbNetworks <init>: constructed 2011-03-16 18:13:23,860
class ui.network.MbNetworks getTabName: detailsTab
Menu processSelection: Pressed menu
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
MbEventTypes <init>: constructed 2011-03-16 18:13:23,969
class ui.common.events.MbEventTypes getEventTypesItems: [javax.faces.model.SelectItem@197889e, ...]
class ui.common.events.MbEventTypes getFilter: common.events.EventType@bab853
class ui.common.events.MbEventTypes getEntityTypes: [javax.faces.model.SelectItem@9b80b4, ...]
class ui.common.events.MbEventTypes getFilter: common.events.EventType@bab853
class ui.common.events.MbEventTypes access$0: Data size
class ui.common.events.MbEventTypes getRowsNum: 20
class ui.common.events.MbEventTypes access$0: Data
class ui.common.events.MbEventTypes getItemSelection: null
class ui.common.events.MbEventTypes getRowsNum: 20
class ui.common.events.MbEventTypes getRowsNum: 20
class ui.common.events.MbEventTypes getRowsNum: 20
class ui.common.events.MbEventTypes getActiveEventType: null
class ui.common.events.MbEventTypes getActiveEventType: null
class ui.common.events.MbEventTypes getEventTypesItems: [javax.faces.model.SelectItem@1dfab16, ...]
class ui.common.events.MbEventTypes getNewEventType: common.events.EventType@1f84cb0
class ui.common.events.MbEventTypes getEntityTypes: [javax.faces.model.SelectItem@154953, ...]
class ui.common.events.MbEventTypes getNewEventType: common.events.EventType@1f84cb0
class ui.common.events.MbEventTypes getRowsNum: 20
END PHASE RENDER_RESPONSE 6
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE RENDER_RESPONSE 6
class ui.network.MbNetworks getFilter: net.Network@65f126

到这时“事件类型”表单已完全加载,我可以看到页面,浏览器不再等待任何数据。在那里你已经可以看到一个奇怪的事情:调用MbNetworks的getFilter。此外,我的突破点是MbNetworks构造函数的第一行。在bean被intit之前调用方法?好吧,可能只是Eclipse的bug。无论如何奇怪的事情仍然存在:MbNetworks的每个吸气者都会被召唤。 (请记住,“网络”页面不存在,我在“事件类型”页面上与网络没有任何共同点) MbNetworks <init>: constructed 2011-03-16 18:14:01,156
class ui.network.MbNetworks getFilter: net.Network@65f126
class ui.network.MbNetworks getInstitutions: [javax.faces.model.SelectItem@160ac3e, ...]
class ui.network.MbNetworks getFilter: net.Network@65f126
class ui.network.MbNetworks access$3: Data size
class ui.network.MbNetworks getRowsNum: 20
class ui.network.MbNetworks access$3: Data
class ui.network.MbNetworks getItemSelection: null
class ui.network.MbNetworks getRowsNum: 20
class ui.network.MbNetworks getRowsNum: 20
class ui.network.MbNetworks getRowsNum: 20
class ui.network.MbNetworks getActiveNetwork: null
class ui.network.MbNetworks getActiveNetwork: null
class ui.network.MbNetworks getTabName: detailsTab
class ui.network.MbNetworks getTabName: detailsTab
class ui.network.MbNetworks getLanguages: [javax.faces.model.SelectItem@130a65, javax.faces.model.SelectItem@f9d23]
class ui.network.MbNetworks getActiveNetwork: null
...
class ui.network.MbNetworks getActiveNetwork: null
class ui.network.MbNetworks getLanguages: [javax.faces.model.SelectItem@130a65, javax.faces.model.SelectItem@f9d23]
class ui.network.MbNetworks getNewNetwork: net.Network@5d0f3
class ui.network.MbNetworks getInstitutions: [javax.faces.model.SelectItem@160ac3e, ...]
class ui.network.MbNetworks getNewNetwork: net.Network@5d0f3
...
class ui.network.MbNetworks getNewNetwork: net.Network@5d0f3
class ui.network.MbNetworks getRowsNum: 20
END PHASE RENDER_RESPONSE 6

Btw,(对于BalusC评论)加载页面后,Firebug中没有AJAX查询。

0 个答案:

没有答案