如何在ADF中设置PanelTabbed的默认选中标签页?
实现PanelTabbed默认打开第一个标签页的方案
针对你遇到的问题,有两种可靠的实现方式,结合JSFF页面和Backing Bean即可完成:
方式一:重置PageFlowScope变量(适配现有代码)
你当前的标签页disclosed属性绑定到了pageFlowScope的变量,页面重新打开时保留之前选中状态是因为pageFlowScope的变量未被重置。只需在页面初始化时强制设置第一个标签的变量为true,第二个为false:
步骤1:给页面添加初始化监听器
在JSFF页面的根组件(如af:document或af:form内)添加preRenderView事件监听器,触发Backing Bean的初始化方法:
<f:event listener="#{yourBackingBean.initTabState}" type="preRenderView"/>
步骤2:在Backing Bean中编写初始化逻辑
在你的Backing Bean中添加initTabState方法,重置pageFlowScope的变量:
import oracle.adf.share.ADFContext; public class YourBackingBean { public void initTabState() { ADFContext adfContext = ADFContext.getCurrent(); // 设置第一个标签为展开状态 adfContext.getPageFlowScope().put("expandHeader", Boolean.TRUE); // 设置第二个标签为收起状态 adfContext.getPageFlowScope().put("expandLine", Boolean.FALSE); } }
方式二:使用PanelTabbed的selectedChild属性(更直接)
通过绑定panelTabbed的selectedChild属性到Backing Bean的变量,直接控制默认选中的标签:
步骤1:修改JSFF页面的PanelTabbed标签
添加selectedChild属性绑定到Backing Bean的变量:
<af:panelTabbed position="above" id="pt1" styleClass="AFStretchWidth" childCreation="lazy" selectedChild="#{yourBackingBean.selectedTabId}"> <af:showDetailItem id="tab1" text="tab1" stretchChildren="first"> </af:showDetailItem> <af:showDetailItem id="tab2" text="tab2" stretchChildren="first" styleClass="AFStretchWidth"> </af:showDetailItem> </af:panelTabbed>
(注:可移除原来的disclosed属性绑定,selectedChild会自动控制标签的选中状态)
步骤2:在Backing Bean中配置默认值
在Backing Bean中定义并初始化selectedTabId变量,确保页面加载时默认选中第一个标签:
public class YourBackingBean { // 初始化默认选中第一个标签的id private String selectedTabId = "tab1"; public String getSelectedTabId() { return selectedTabId; } public void setSelectedTabId(String selectedTabId) { this.selectedTabId = selectedTabId; } // 可选:如果需要确保每次页面刷新都重置为第一个标签,添加初始化方法 public void initTabState() { this.selectedTabId = "tab1"; } }
如果添加了initTabState方法,记得在页面中添加preRenderView监听器(同方式一的步骤1)。
内容的提问来源于stack exchange,提问作者Vyush Agarwal
相关产品推荐
相关产品推荐

