2010-10-26 38 views
5

假设我想在<rich:tabPanel>组件中创建一个变量集合<rich:tab>。所以我试图这样做:有没有办法动态创建<rich:tab>元素?

<rich:tabPanel switchType="client" ...> 
    <ui:repeat value="#{myBean.myTabs}" var="tab"> 
     <rich:tab name="#{tab.name}" label="#{tab.label}"/> 
    </ui:repeat> 
</rich:tabPanel> 

但它没有工作,因为没有制表符。我也有在日志中以下消息:

j_id174: tab panel has no enabled or rendered tabs! 

这个问题似乎被别人的人会遇到,例如here

正如前面的线程所建议的那样,我将<ui:repeat>替换为<c:forEach>,但问题仍然存在。


我有办法用我的<rich:tabPanel>组件的binding属性来解决这个问题:

<rich:tabPanel switchType="client" binding="#{tabNavigationBean.tabPanel}" 
</rich:tabPanel> 

,然后在我的Java bean:

private HtmlTabPanel tabPanel; // + getter and setter 

public void setTabPanel(HtmlTabPanel tabPanel) { 
    this.tabPanel = tabPanel; 
    if (tabPanel != null) { 
     createTabs(); 
    } 
} 

private void createTabs() { 
    Application application = FacesContext.getCurrentInstance().getApplication(); 
    HtmlTab newTab = null; 
    for (DedicatedPageTab dpt : getDedicatedPageTabs()) { 
     newTab = (HtmlTab) application.createComponent(HtmlTab.COMPONENT_TYPE); 
     newTab.setLabel(dpt.getLabel()); 
     newTab.setName(dpt.getName()); 
     tabPanel.getChildren().add(newTab); 
    } 
} 

此代码工作

但是,我的问题是要知道我是否可以使用binding属性(即100%纯XHTML解决方案)解决我的问题而不是

+0

技术信息:Java的1.6,JSF 1.2 +的Facelets,RichFaces的3.3 – romaintaz 2010-10-26 09:13:14

+0

我不知道这是否会工作更好,但尝试? – Naganalf 2010-10-26 18:34:32

+0

@Naganalf也尝试过,但没有成功:( – romaintaz 2010-10-26 18:37:45

回答

0

是的,这是可能的,但很难。以下是我的一些注意事项:

使用c:forEach在outputPanel内的tabPanel内部创建选项卡标签。重新呈现outputPanel的标签去除,添加或更改名称

http://relation.to/11633.lace

http://devharbor.blogspot.com/2009/08/add-jsf-controls-dynamically-with.html


我们也利用模板的,但我仍然有它的一个突出问题:How to force the build phase in a JSF 1.2 page using JSTL?

http://facelets.java.net/nonav/docs/dev/docbook.html#template 模板上的文档

http://www.jsfcentral.com/articles/facelets_3.html 模板教程

2
<a4j:outputPanel id="out"> 
    <rich:tabPanel> 
     <c:forEach items="list" var="var"> 
      <rich:tab label="#{var.name}" switchType="client"> 
       content 
      </rich:tab> 
     </c:forEach> 
    </rich:tabPanel> 
</a4j:outputPanel> 
相关问题