Supongamos que quiero crear un conjunto variable de elementos <rich:tab>
dentro de un componente <rich:tabPanel>
. Así que traté de hacerlo de la siguiente manera:¿Hay alguna manera de crear elementos dinámicamente <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>
Pero no funcionó, ya que no se representa ninguna pestaña. También me dio el mensaje siguiente en los registros:
j_id174: tab panel has no enabled or rendered tabs!
Este problema parece ser encontrado por otros personas, por ejemplo here.
Por lo sugerido por el hilo anterior, reemplacé mi <ui:repeat>
por un <c:forEach>
pero el problema persiste.
tengo una manera de resolver este problema mediante el atributo binding
de mi <rich:tabPanel>
componente:
<rich:tabPanel switchType="client" binding="#{tabNavigationBean.tabPanel}"
</rich:tabPanel>
y luego en mi grano de 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);
}
}
Este código está trabajando.
Sin embargo, mi pregunta es saber si puedo resolver mi problema sin usando el atributo binding
(es decir, una solución pura XHTML 100%)?
Información técnica: Java 1.6, JSF 1.2 + Facelets, richfaces 3.3 – romaintaz
no sé si esto iba a funcionar mejor, pero trate? –
Naganalf
@Naganalf también lo intentó, sin éxito :( – romaintaz