如何在往返外部站点后保持p:tabView选项卡处于活动状态



从其他站点重定向后,如何保持活动选项卡?在我的界面上,我想在用户使用第三方服务进行信用卡授权后,在选项卡窗口上返回信息。

我有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包含一个按钮,用于将用户引导到信用卡授权服务。授权后,用户被重定向回我的网站,那里的信息应该显示在同一个选项卡上,该选项卡上有auth服务按钮。信息显示正确,但客户端不会保持选项卡处于活动状态。如何做到这一点?

此问题的测试解决方案不起作用。重定向页面显示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

另请参阅:

  • EL#{bean.id}如何调用托管bean方法bean.getId((
  • 如何选择正确的bean作用域

最新更新