在我的应用程序中,我想使用一个动态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,而是一个泛型标签。我该如何解决这个问题呢?
发布于 2019-07-08 18:04:24
您可以确定已关闭选项卡的选项卡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);
// ...
}https://stackoverflow.com/questions/26847828
复制相似问题