Olá amigos, estou com um problema que fazem dois dias que estou a procura de soluções e nada de encontrar e solucionar.
Estou desenvolvendo uma aplicação que precisa ser extremamente genérica e um dos requisitos é gerar Tabs genéricos, sendo assim, fui para linha de cód. ao invés de xhtml para poder gerar os tabs.
Bom o cód. de geração está correto e ele está inserindo certinho na tela, o problema ocorre quando eu tento gerar o segundo tab, quando o ajax da refresh no componente ele perde as propriedades de texto do tab anterior, e gera a seguinte exceção:
[quote]Abr 17, 2014 9:17:44 AM com.sun.faces.application.view.FaceletPartialStateManagementStrategy saveDynamicActions
Advertência: Unable to save dynamic action with clientId ‘formTelas:tabTelaPrincipal:dataTableClientesRapido:colunasClientesRapido:textoConteudoClientesRapido’ because the UIComponent cannot be found
Abr 17, 2014 9:17:44 AM com.sun.faces.application.view.FaceletPartialStateManagementStrategy saveDynamicActions
Advertência: Unable to save dynamic action with clientId ‘formTelas:tabTelaPrincipal:dataTableClientesRapido:colunasClientesRapido:headerClientesRapido’ because the UIComponent cannot be found[/quote]
Agora vou passar as linhas de códigos:
xhtml de click para gerar os tabs (menus):
Ele entra em uma classe que controla toda geração de menus, e esses dois chamam as classes que geram as Tabs;
<h:commandButton actionListener="#{telaPrincipal.clientesRapido}" ajax="false" title="Clientes" image="resources/images/iconsTopo/2.png" styleClass="img-responsive menuIcon separadorMenu"/>
<h:commandButton actionListener="#{telaPrincipal.produtosRapido}" ajax="false" title="Produtos" image="resources/images/iconsTopo/4.png" styleClass="img-responsive menuIcon"/>
Código de geração da Datatable:
private void gerarTab() {
this.inicio = new Tab();
this.inicio.setTitle(getTituloTab());
this.inicio.setId("tab" + getId());
// this.inicio.setTransient(true);
this.inicio.setClosable(true);
}
public void gerarTabela() {
// <p:dataTable var="o" style="width:100%;" resizableColumns="true"
// value="#{bBuscaCliente.lista}" scrollable="true"
// id="dataTable1">
tabela = new DataTable();
tabela.setVar("o");
tabela.setResizableColumns(true);
tabela.setScrollable(true);
tabela.setId("dataTable" + getId());
tabela.setRowIndexVar("rowIndexTeste");
tabela.setValueExpression("value", CControleGeral.criarValueExpression(
getBeanTabela(), List.class));
// <p:columns value="#{bBuscaCliente.coluna}" var="c">
// <f:facet name="header">
// <h:outputText value="#{c.header}" />
// </f:facet>
//
// <h:outputText value="#{o[c.property]}" />
// </p:columns>
colunas = (Columns) FacesContext.getCurrentInstance().getApplication()
.createComponent(Columns.COMPONENT_TYPE);
colunas.setVar("c");
colunas.setId("colunas" + getId());
colunas.setValueExpression("value", CControleGeral
.criarValueExpression(getBeanTabelaColuna(), List.class));
HtmlOutputText textoHeader = (HtmlOutputText) FacesContext
.getCurrentInstance().getApplication()
.createComponent(HtmlOutputText.COMPONENT_TYPE);
textoHeader.setId("header" + getId());
textoHeader.setValueExpression("value", CControleGeral
.criarValueExpression("#{c.header}", String.class));
colunas.getFacets().put("header", textoHeader);
HtmlOutputText textoConteudo = (HtmlOutputText) FacesContext
.getCurrentInstance().getApplication()
.createComponent(HtmlOutputText.COMPONENT_TYPE);
textoConteudo.setId("textoConteudo" + getId());
textoConteudo.setValueExpression("value", CControleGeral
.criarValueExpression("#{o[c.property]}", String.class));
colunas.getChildren().add(textoConteudo);
tabela.getChildren().add(colunas);
}
public void gerarTabelaDinamica() {
gerarTab();
gerarTabela();
inicio.getChildren().add(tabela);
// Tabela Principal
FacesContext.getCurrentInstance().getViewRoot() .findComponent(":formTelas:tabTelaPrincipal")l.getChildren().add(inicio);
}
O código esta funcionando, mas quando gera duas tabs ao mesmo tempo ele da pau … e gera a exceção acima comentado, se alguém puder me dar uma LUZ, estou precisando