Como dar update em um campo pai, usando fragment - JSF + Primefaces

0 respostas
M

[EDIT]

Olá, tenho uma tabela que é gerada conforme os seguintes passos:

1 - o usuário escolhe 2 parâmetros e um gráfico é gerado de acordo dom esses 2 parâmetros
2 - nessa tela do gráfico há um botão onde é exibido uma tabela referente a esse gráfico gerado
3 - a tabela é gerada na tela através de um modal, baseado na escolha da etapa 1

O problema: quando faço um filterBy, a tabela não atualiza corretamente, ela trava na página 1 com as informações congeladas, mesmo se eu apagar o conteúdo preenchido no filterBy a tabela continua travada sem poder fazer mais qualquer tipo de consulta.

Segue os códigos:

template.xhtml:
<ui:fragment>
        <h:form>
            <[b]p:dataTable[/b] id="registros" var="registro" value="#{[b]processoController.registros.listaRegistros[/b]}" scrollable="true"  scrollWidth="900" scrollHeight="350"
                         widgetVar="listaRegistros" emptyMessage="Não há registros." 
                         filteredValue="#{processoController.registros.filtroListaRegistros}"
                         paginator="true" rows="15" paginatorPosition="bottom" 
                         paginatorTemplate="{CurrentPageReport} {RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}" 
                         rowsPerPageTemplate="15,25,50,100"
                         currentPageReportTemplate="Mostrando de {startRecord} até {endRecord} de {totalRecords} registros">
                
                
               [b] <ui:insert name="colunas"/>[/b]

                <f:facet name="footer">
                    <p:commandButton  value="CSV" ajax="false" styleClass="btn" icon="ui-icon-arrowthickstop-1-s">  
                        <p:dataExporter type="csv" target="registros" fileName="#{processoController.nomeArquivo}"/>  
                    </p:commandButton>  
                </f:facet>
            </p:dataTable>
        </h:form>
    </ui:fragment>
Como podemos ver, esse template gera um dataTable que serve para todas as demais páginas que contém as colunas das tabelas. Um dos problemas é que value="#{processoController.registros.listaRegistros}" me devolve uma lista genérica: "private List listaRegistros"; pois cada página tem uma lista com atributos diferentes uma da outra.

Abaixo segue um exemplo da página que usa o template e contém as colunas que devem popular a dataTable:

<ui:composition template="template.xhtml">
        <ui:define name="[b]colunas[/b]">
            <p:column filterBy="#{registro.codCliente}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Código do cliente" />                  
                </f:facet>
                <h:outputText value="#{registro.codCliente}" />
            </p:column>

            <p:column filterBy="#{registro.numCadastro}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Número cadastro" />                  
                </f:facet>
                <h:outputText value="#{registro.numCadastro}" />
            </p:column>

            <p:column filterBy="#{registro.timestamp}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Timestamp" />                  
                </f:facet>
                <h:outputText value="#{registro.timestamp}">
                    <f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" timeZone="#{dataController.timezone}"/>
                </h:outputText>
            </p:column>
            
            <p:column filterBy="#{registro.numDocumento}" filterMatchMode="contains" width="150">
                <f:facet name="header">                      
                    <h:outputText value="Número documento" />                  
                </f:facet>
                <h:outputText value="#{registro.numDocumento}" />
            </p:column>
           

            <p:column filterBy="#{registro.mesCompetencia}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Mês competência" />                  
                </f:facet>
                <h:outputText value="#{registro.mesCompetencia}" />
            </p:column>

            <p:column filterBy="#{registro.anoCompetencia}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Ano competência" />                  
                </f:facet>
                <h:outputText value="#{registro.anoCompetencia}" />
            </p:column>

            <p:column filterBy="#{registro.insDivida}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Ins dívida" />                  
                </f:facet>
                <h:outputText value="#{registro.insDivida}" />
            </p:column>

            <p:column filterBy="#{registro.livro}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Livro" />                  
                </f:facet>
                <h:outputText value="#{registro.livro}" />
            </p:column>

            <p:column filterBy="#{registro.folha}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Folha" />                  
                </f:facet>
                <h:outputText value="#{registro.folha}" />
            </p:column>

            <p:column filterBy="#{registro.volume}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Volume" />                  
                </f:facet>
                <h:outputText value="#{registro.volume}" />
            </p:column>

            <p:column filterBy="#{registro.fundamento}" filterMatchMode="contains" width="300">
                <f:facet name="header">                      
                    <h:outputText value="Fundamento" />                  
                </f:facet>
                <h:outputText value="#{registro.fundamento}" />
            </p:column>

            <p:column filterBy="#{registro.dataInscricao}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Data inscrição" />                  
                </f:facet>
                <h:outputText value="#{registro.dataInscricao}">
                    <f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" timeZone="#{dataController.timezone}"/>
                </h:outputText>
            </p:column>

            <p:column filterBy="#{registro.status}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Status" />                  
                </f:facet>
                <h:outputText value="#{registro.status}" />
            </p:column>

            <p:column filterBy="#{registro.processado}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Processado" />                  
                </f:facet>
                <h:outputText value="#{registro.processado}" />
            </p:column>

            <p:column filterBy="#{registro.tipo}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Tipo" />                  
                </f:facet>
                <h:outputText value="#{registro.tipo}" />
            </p:column>

            <p:column filterBy="#{registro.valorImposto}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Valor imposto" />                  
                </f:facet>
                <h:outputText value="#{registro.valorImposto}" />
            </p:column>

            <p:column filterBy="#{registro.controleParcela}" filterMatchMode="contains" width="125">
                <f:facet name="header">                      
                    <h:outputText value="Controle parcela" />                  
                </f:facet>
                <h:outputText value="#{registro.controleParcela}" />
            </p:column>

        </ui:define>
        
    </ui:composition>

Alguém tem alguma sugestão? Estou alguns dias já com esse problema e não consigo resolver.

Já gerei a tabela diretamente sem o template, já criei um objeto representando a tabela especificada e também já tentei usar o "columns" para gerar a tabela dinamicamente, nenhuma das opções funcionou.

Obrigado!!

Criado 6 de dezembro de 2013
Respostas 0
Participantes 1