我对 RichFace 的 (3.3.3) TabPanel 有疑问。我参与了两个使用 TabPanel 的项目。在每个项目中,我注意到不可见选项卡上的组件仍然调用了它们的“getter”方法。
例如,第一个选项卡上有一个数据表,并且任何时候从任何其他选项卡(包括 ajax 请求)发出请求,绑定到第一个选项卡上的数据表的 bean 仍然调用它的 getter。
我假设会发生这种情况(即使选项卡当前未在 UI 中呈现),因为组件仍在组件层次结构中?换句话说,所有组件都是父选项卡面板的子级,因此在每个请求上都会处理..即使它们不可见。
好的...如果我的假设是正确的,那么我需要一种方法来不对未使用的选项卡调用数据检索逻辑。我已经阅读了有关延迟加载数据(不在 getter 中放置数据检索逻辑)的帖子,因为可能会多次调用 getter。我正在尽力坚持这一点;我看到的问题是,即使我将绑定到表(在选项卡一上)的 bean 定义为请求范围并且 getter 懒惰地加载表的数据,bean 被实例化,并且数据在来自其他选项卡的每个 ajax 请求上拉(懒惰地)。
必须有一种方法可以解决这个问题,将所有内容从 RichFace 的 TabPanel 中拉出并滚动我自己的。
我尝试使bean绑定到表会话范围并“缓存” Getter返回表的数据,但是问题是没有生命周期的方法可以绑定到何时再次呈现选项卡(通过手动通过手动进行)单击选项卡或以编程方式选择选项卡)。
我会很感激任何建议。