Primefaces TabView 动态
Posted
技术标签:
【中文标题】Primefaces TabView 动态【英文标题】:Primefaces TabView dynamic 【发布时间】:2015-01-06 23:52:11 【问题描述】:在我的应用程序中,我想使用动态 tabView,其中每个选项卡都有一个带有不同页面的 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>
但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>
这是我的 onTabClose 方法:
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 动态的主要内容,如果未能解决你的问题,请参考以下文章