Primefaces TabView动态

时间:2014-11-10 16:02:43

标签: dynamic primefaces include tabview

在我的应用程序中,我想使用动态tabView,其中每个选项卡都有一个带有不同页面的“ui:include”。 我有一个扩展Tab的TabObject列表。 TabObject有一个xhtml页面作为String属性:

public class TabObject extends Tab  {
   private String page;
   ...
}

我会动态添加标签。 我的tabView:

<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>

“ui:include”不适用于变量tab_ext。 我的解决方案是:

<p:tabView dynamic="true" activeIndex="#{tabViewManagedBean.activeIndex}" >
  <p:ajax event="tabClose" listener="#{tabViewManagedBean.onTabClose}" />
  <p:ajax event="tabChange" listener="#{tabViewManagedBean.onTabChange}"/>

  <c:forEach items="#{tabViewManagedBean.tabs}" var="tab_ext" varStatus="loop_ext" >
   <p:tab title="#{tab_ext.title}" closable="#{tab_ext.closable}" >
    <f:subview id="tab_ext_#{loop_ext.index}" >
      <ui:include src="#{tab_ext.page}" />
    </f:subview>
   </p:tab>
  </c:forEach>

</p:tabView>

这是我在onTabClos​​e上的方法:

public void onTabClose(TabCloseEvent event) {
    TabObject t=(TabObject)event.getData();
}

在事件回调中,我无法获取我的TabObject,而是一个通用的Tab。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以确定已关闭的标签页的标签index。然后,从index列表中获得确定的tabs的元素:

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