2010-10-26 80 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> 
相關問題