In my application I want to use a dynamic tabView where each tab has a ui:include
with a different page.
I have a List of TabObject
that extends Tab
.
A TabObject
has a xhtml page as String property:
public class TabObject extends Tab {
private String page;
...
}
In my first attempt I wanted to add tabs dynamically:
<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>
But ui:include
doesn't work with variable tab_ext
using this technique.
My solution so far is:
<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>
This is my method onTabClose:
public void onTabClose(TabCloseEvent event) {
TabObject t=(TabObject)event.getData();
}
On event callback I can't get my TabObject, but a generic Tab. How can I fix this?