Jsf 在primefaces中创建主-子概念

Jsf 在primefaces中创建主-子概念,jsf,primefaces,Jsf,Primefaces,我使用的是PrimeFaces3.5+Mojara2.2 我正在尝试创建一个主-子类环境,其中所有应用程序都列在一个带有命令按钮的选项卡中。每个命令按钮将在同一父窗口中打开另一个选项卡 为了实现这一点,我在iframe中使用了动态选项卡 <p:tabView value="#{bean.tabs} var="tab"> <p:tab title="#{tab.title}" closable="#{tab.closable}"> <ifr

我使用的是PrimeFaces3.5+Mojara2.2

我正在尝试创建一个主-子类环境,其中所有应用程序都列在一个带有命令按钮的选项卡中。每个命令按钮将在同一父窗口中打开另一个选项卡

为了实现这一点,我在iframe中使用了动态选项卡

<p:tabView value="#{bean.tabs} var="tab">
     <p:tab title="#{tab.title}" closable="#{tab.closable}">
         <iframe src="#{tab.content}" class="ui-widget" width="100%" height="900px"/>
     </p:tab>
</p:tabView>
在backingbean中,我创建了一个选项卡,其中显示命令按钮,如下所示

public class Bean{
    private List<Tab> tabs;
    ...

    public Bean(){
          tabs = new ArrayList<Tab>();
          Tab tab1 = new Tab("Applicaton","dispApplications.xhtml",false);
          tabs.add ( tab1 );
    }
}
公共类Bean{
私有列表选项卡;
...
公共豆(){
tabs=newarraylist();
Tab tab1=新选项卡(“Applicaton”,“dispplications.xhtml”,false);
tabs.add(tab1);
}
}
dispApplications.xhtml

<h:form id="buttonForm">
      <h:panelGrid columns="6" border="0">
           <c:forEach var="dataItem" items="${bean.applications}">
               <h:column>
                   <p:graphicImage value="/images/#{dataItem.icon}"/>
                   <p:commandButton binding="#{bean.cmdButton}"/>
               </h:column>
           </c:forEach>
      </h:panelGrid>
</h:form>

问题: 我能够显示初始“应用程序”选项卡。然而,当我试图调用每个应用程序时,我不得不强制重新加载整个页面以加载选项卡。我正在为绑定到Bean的每个commandButton执行
cmdButton.setOnClick(“parent.location.href=parent.location.href”)
。 我还为cmdButton创建了一个内联processListener,它创建了一个“Tab”实例并将其添加到tabs中

  • 我希望避免完全重新加载页面以显示选项卡
  • 我想突出显示最近添加/打开的新选项卡
  • Tabclose始终关闭第一个选项卡,无论我尝试关闭哪个选项卡。在线primefaces showcase显示了非常干净的实现,但我想这在4.0中是可行的,希望这是3.5版本中的一个bug

提供了很多帮助,但这是基于tabChange事件的,并且更新是使用requestContext完成的。当我使用iframe时,这不起作用

任何其他方法都是受欢迎的。
提前感谢

我三件事中有两件事做到了。通过添加activeTabIndex“tab”属性并将其绑定到bean,我能够突出显示新选项卡。即使使用Primefaces 4.0,tabclose的行为方式也相同。我认为这是动态标签的问题。第1点我仍在探索…请求输入,您的输入将有所帮助…谢谢我已经停止使用tabView,而是使用java脚本为每个正在打开的新应用程序绘制UI。
<h:form id="buttonForm">
      <h:panelGrid columns="6" border="0">
           <c:forEach var="dataItem" items="${bean.applications}">
               <h:column>
                   <p:graphicImage value="/images/#{dataItem.icon}"/>
                   <p:commandButton binding="#{bean.cmdButton}"/>
               </h:column>
           </c:forEach>
      </h:panelGrid>
</h:form>