Jsf Primefaces选项卡式动态

Jsf Primefaces选项卡式动态,jsf,primefaces,tabview,Jsf,Primefaces,Tabview,在我的应用程序中,我想使用一个动态选项卡视图,其中每个选项卡都有一个带有不同页面的ui:include。 我有一个扩展了Tab的TabObject列表。 TabObject将xhtml页面作为字符串属性: public class TabObject extends Tab { private String page; ... } 在第一次尝试中,我希望动态添加选项卡: <p:tabView dynamic="true" value="#{tabViewManagedBea

在我的应用程序中,我想使用一个动态选项卡视图,其中每个选项卡都有一个带有不同页面的
ui:include
。 我有一个扩展了
Tab
TabObject
列表。
TabObject
将xhtml页面作为字符串属性:

public class TabObject extends Tab  {
   private String page;
   ...
}
在第一次尝试中,我希望动态添加选项卡:

<p:tabView dynamic="true" value="#{tabViewManagedBean.tabs}" var="tab_ext" activeIndex="#{tabViewManagedBean.activeIndex}" >
  <p:ajax event="tabClose" listener="#{tabViewManagedBean.onTabClose}" />
  <p:ajax event="tabChange" listener="#{tabViewManagedBean.onTabChange}"/>
   <p:tab title="#{tab_ext.title}" closable="#{tab_ext.closable}" >
    <ui:include src="#{tab_ext.page}" />
   </p:tab>
</p:tabView>
这是我的方法:

public void onTabClose(TabCloseEvent event) {
    TabObject t=(TabObject)event.getData();
}
在事件回调中,我无法获取TabObject,而是一个通用选项卡。
如何解决此问题?

您可以确定已关闭选项卡的选项卡
索引。然后,从
选项卡
列表中获取确定的
索引的元素:

public void onTabClose(TabCloseEvent event) {
    Tab tab = event.getTab();
    UIComponent tabView = tab.getParent();
    int index = tv.getChildren().indexOf(tab);
    TabObject t = tabs.get(index);
    // ...
}
public void onTabClose(TabCloseEvent event) {
    Tab tab = event.getTab();
    UIComponent tabView = tab.getParent();
    int index = tv.getChildren().indexOf(tab);
    TabObject t = tabs.get(index);
    // ...
}