如何在往返外部站点后保持 p:tabView 选项卡处于活动状态
How to keep p:tabView tab active after roundtrip to external site
从另一个站点重定向后如何保持活动选项卡?
在我的界面上,我想在用户使用第三方服务完成信用卡授权后 return 选项卡上的信息 window。
我有 Primefaces 做的前端。
xhtml 上的选项卡视图:
<p:tabView id="mytabs" styleClass="mystyle" style="min-height: 600px;" activeIndex="#{backinBean.getActiveTab}">
<p:tab title="tab" titleStyleClass="mystyle">
<ui:include src="reports.xhtml"/>
</p:tab>
</p:tabView>
</p:tab>
<p:tab id="anothertab" title="Another tab" titleStyleClass="myclass"
<ui:include src="2ndtab.xhtml"/>
</p:tab>
</p:tabView>
我的 backinBean:
private Integer activeTab = 0;
public Integer getActiveTab() {
return activeTab;
}
public void setActiveTab(Integer activeTab) {
this.activeTab = activeTab;
}
reports.xhtml 包含一个按钮,将用户引导至信用卡授权服务。
授权后,用户将被重定向回我的网站,信息应显示在同一个选项卡上,该选项卡具有授权服务按钮。信息显示正确,但客户端不会使选项卡保持活动状态。如何实现?
来自此 question 的测试解决方案无效。重定向页面显示 index.xhtml
上的第一个选项卡后
index.xhtml 选项卡
<p:tabView id="mytabs" styleClass="mystyle" style="min-height: 600px;">
<p:ajax event="tabChange" listener="#{backinBean.onTabChange}" />
<p:tab title="tab" titleStyleClass="mystyle">
<ui:include src="firstTab"/>
</p:tab>
</p:tabView>
</p:tab>
<p:tab id="wantedActiveTab" title="Another tab" titleStyleClass="myclass"
<ui:include src="2ndtab.xhtml"/>
</p:tab>
</p:tabView>
backinBean:
private Integer activeTab = 0;
public void onTabChange(TabChangeEvent event) {
TabView tabView = (TabView) event.getComponent();
activeTab = tabView.getChildren().indexOf(event.getTab());
}
快到了。您不应该从 p:tabView
中删除 activeIndex="#{backinBean.activeTab}"
。另外,您的 EL 中有错字。您不应该使用 getActiveTab
来获得 activeTab
,只需使用 activeTab
.
此外,在这种情况下,您的 bean 的范围应设置为 @SessionScoped
。
另请参阅:
- How does EL #{bean.id} call managed bean method bean.getId()
- How to choose the right bean scope?
从另一个站点重定向后如何保持活动选项卡? 在我的界面上,我想在用户使用第三方服务完成信用卡授权后 return 选项卡上的信息 window。
我有 Primefaces 做的前端。
xhtml 上的选项卡视图:
<p:tabView id="mytabs" styleClass="mystyle" style="min-height: 600px;" activeIndex="#{backinBean.getActiveTab}">
<p:tab title="tab" titleStyleClass="mystyle">
<ui:include src="reports.xhtml"/>
</p:tab>
</p:tabView>
</p:tab>
<p:tab id="anothertab" title="Another tab" titleStyleClass="myclass"
<ui:include src="2ndtab.xhtml"/>
</p:tab>
</p:tabView>
我的 backinBean:
private Integer activeTab = 0;
public Integer getActiveTab() {
return activeTab;
}
public void setActiveTab(Integer activeTab) {
this.activeTab = activeTab;
}
reports.xhtml 包含一个按钮,将用户引导至信用卡授权服务。 授权后,用户将被重定向回我的网站,信息应显示在同一个选项卡上,该选项卡具有授权服务按钮。信息显示正确,但客户端不会使选项卡保持活动状态。如何实现?
来自此 question 的测试解决方案无效。重定向页面显示 index.xhtml
上的第一个选项卡后index.xhtml 选项卡
<p:tabView id="mytabs" styleClass="mystyle" style="min-height: 600px;">
<p:ajax event="tabChange" listener="#{backinBean.onTabChange}" />
<p:tab title="tab" titleStyleClass="mystyle">
<ui:include src="firstTab"/>
</p:tab>
</p:tabView>
</p:tab>
<p:tab id="wantedActiveTab" title="Another tab" titleStyleClass="myclass"
<ui:include src="2ndtab.xhtml"/>
</p:tab>
</p:tabView>
backinBean:
private Integer activeTab = 0;
public void onTabChange(TabChangeEvent event) {
TabView tabView = (TabView) event.getComponent();
activeTab = tabView.getChildren().indexOf(event.getTab());
}
快到了。您不应该从 p:tabView
中删除 activeIndex="#{backinBean.activeTab}"
。另外,您的 EL 中有错字。您不应该使用 getActiveTab
来获得 activeTab
,只需使用 activeTab
.
此外,在这种情况下,您的 bean 的范围应设置为 @SessionScoped
。
另请参阅:
- How does EL #{bean.id} call managed bean method bean.getId()
- How to choose the right bean scope?