如何在往返外部站点后保持 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?