Primefaces TabView 动态

Posted

技术标签:

【中文标题】Primefaces TabView 动态【英文标题】:Primefaces TabView dynamic 【发布时间】:2015-01-06 23:52:11 【问题描述】:

在我的应用程序中,我想使用动态 tabView,其中每个选项卡都有一个带有不同页面的 ui:include。 我有一个扩展TabTabObject 列表。 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>

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

您可以确定关闭标签的标签index。然后你从你的tabs 列表中得到确定的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);
    // ...

【讨论】:

以上是关于Primefaces TabView 动态的主要内容,如果未能解决你的问题,请参考以下文章

Primefaces tabview 验证与动态选项卡

Primefaces tabview 设置默认静态选项卡

Primefaces p:tabView:selectOneMenu的值丢失

如何在 p:tabView 组件中动态添加和删除选项卡

JSF Primefaces TabView 问题

修复 p:tabView primefaces 的宽度和高度