Допустим, я хочу создать набор переменных из <rich:tab>
элементов в компоненте <rich:tabPanel>
. Поэтому я попытался сделать так:
<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!
Эта проблема, похоже, встречается другими людьми, например здесь .
Итак, как было предложено в предыдущей теме, я заменил свой <ui:repeat>
на <c:forEach>
, но проблема все еще возникает.
<Ч />
У меня есть способ решить эту проблему, используя атрибут binding
моего компонента <rich:tabPanel>
:
<rich:tabPanel switchType="client" binding="#{tabNavigationBean.tabPanel}"
</rich:tabPanel>
и затем в моем Java-бине:
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)?