2010-10-26 6 views
5

Позвольте сказать, что я хочу создать переменную набор из <rich:tab> элементов в составе <rich:tabPanel>. Поэтому я попытался сделать так:Есть ли способ создать динамически <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

+0

я не знаю, если это будет работать лучше, но попробовать ? – Naganalf

+0

@Naganalf также пытался, без успеха :( – romaintaz

ответ

0

Да, это возможно, но сложно. Вот некоторые примечания, которые у меня есть:

Используйте c: forEach для создания тегов вкладки внутри tabPanel внутри outputPanel. засавить 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> 
Смежные вопросы