gpt4 book ai didi

richfaces - 未呈现选项卡内容时调用 Rich TabPanel 的 getter

转载 作者:行者123 更新时间:2023-12-01 14:41:49 27 4
gpt4 key购买 nike

我对 RichFace 的 (3.3.3) TabPanel 有疑问。我参与了两个使用 TabPanel 的项目。在每个项目中,我注意到不可见选项卡上的组件仍然调用了它们的“getter”方法。

例如,第一个选项卡在 in 上有一个数据表,并且任何时间请求都来自 中的任何一个。其他 选项卡(包括 ajax 请求)绑定(bind)到第一个选项卡上的数据表的 bean 仍然调用它的 getter。

我假设会发生这种情况(即使选项卡当前未在 UI 中呈现),因为组件仍在组件层次结构中?换句话说,所有组件都是父选项卡面板的子级,因此在每个请求上都会处理..即使它们不可见。

好的...如果我的假设是正确的,那么我需要一种方法来 不是 为未使用的选项卡调用数据检索逻辑。我已经阅读了有关延迟加载数据(不在 getter 中放置数据检索逻辑)的帖子,因为可能会多次调用 getter。我正在尽力坚持这一点;我看到的问题是,即使我将绑定(bind)到表(在选项卡一上)的 bean 定义为请求范围并且 getter 懒惰地加载表的数据,bean 被实例化,并且数据在来自其他选项卡的每个 ajax 请求上拉(懒惰地)。

必须有一种方法可以解决这个问题,将所有内容从 RichFace 的 TabPanel 中拉出并滚动我自己的。

我尝试使bean绑定(bind)到表 session 范围并“缓存” Getter返回表的数据,但是问题是没有生命周期的方法可以绑定(bind)到何时再次呈现标签(通过手动通过手动进行)单击选项卡或以编程方式选择选项卡)。

我会很感激任何建议。

最佳答案

tabPanel 有一个名为 selectedTab 的属性,每次选择选项卡时都会调用 getter/setter。选择特定选项卡时,您可以使用 setter 方法刷新数据。您还可以通过将选项卡的内容包装在 c:if 元素中来防止在每个选项卡中调用 getter 方法,如果测试返回 false,该元素会停止该 html 段。例如:

<ui:composition 
xmlns="http://www.w3.org/1999/xhtml"
xmlns:rich="http://richfaces.org/rich
xmlns:c="http://java.sun.com/jstl/core">
<rich:tabPanel selectedTab="#{pageScopedBean.selectedTab}">
<rich:tab id="particularTab" label="A Tab">
<c:if test="#{pageScopedBean.selectedTab eq 'particularTab'}">
<!-- tab contents -->
</c:if>
</rich:tab>
</rich:tabPanel>
</ui:composition>

然后在 Java 中,在 pageScopedBean 上创建 getter 和 setter 方法:
@Name("pageScopedBean")
@Scope(ScopeType.PAGE)
public class PageScopedBean {
private String selectedTab = "";
public String getSelectedTab() {
return selectedTab;
}
public void getSelectedTab(String selectedTab) {
this.selectedTab = selectedTab;
if (this.selectedTab == "particularTab") {
// refresh table
}
}

关于richfaces - 未呈现选项卡内容时调用 Rich TabPanel 的 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com