[RESOLVIDO]Primefaces DataTable buscando dados sem excessivamente

Ao clicar no cammandLink alterar contido em uma das colunas do datatable, conforme a tabela abaixo, o método #{solicitacaoController.listarSolictacaoes} no value do datable é executado um número indeterminado de vezes, fazendo com que tenha problema de performance, alguém sabe como resolver? O método está sendo executado sem mandar renderizar o DataTable

[code]<h:form id=“formTabela” >

                <p:dataTable   id="tabela" var="soli" 
                               emptyMessage="Nenhum registro encontrado" 
                               value="#{solicitacaoController.listarSolictacaoes}">
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Alterar"/>
                        </f:facet>                        
                        <p:commandLink  actionListener="#{solicitacaoController.prepararAlterarSolicitacao}" value="Alterar" update=":tabView:formCad:info" oncomplete="dialogGerLivro.show()"/>
                    </p:column>                        
                    <p:column>                                
                        <f:facet name="header"  >
                            <h:outputText value="Sts"/>
                        </f:facet>
                    </p:column>  
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="N°"/>
                        </f:facet>
                        <h:outputText value="#{soli.codSolicitacao}" />
                    </p:column>                          
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Assunto"/>
                        </f:facet>
                        <h:outputText value="#{soli.assunto}" />
                    </p:column> 
               
                </p:dataTable>
            </h:form>[/code]

você está utilizando o actionEvent no seu managedBean?
ponha o atributo process="@this" no seu commandLink

Você colocou um if no listarSolictacaoes?

Esse comportamento é normal no jsf.

Faça algo do tipo
if(solicitacoes == null){
solicitacoes = new …
}

return solicitacoes;

[quote=kleberdamasco]você está utilizando o actionEvent no seu managedBean?
ponha o atributo process="@this" no seu commandLink[/quote]

Eu estou usando o actionEvent , no entanto, colocando o process="@this" no commandLink não funcionou.

Nessa caso, vou ficar com a sugestão dada pelo Hebert, apesar de que acho que seria mais interessante se problema pudesse ser tratado na view pelo primefaces.

Obrigado.

a opção de process this, foi apenas para não processar seu form todo. A assinatura do seu metodo no managedBean
é retorno nome(ActionEvent evento) {

}
?

[quote=kleberdamasco]a opção de process this, foi apenas para não processar seu form todo. A assinatura do seu metodo no managedBean
é retorno nome(ActionEvent evento) {

}
?[/quote]

Sim, está dessa forma:

public void prepararAlterarSolicitacao(ActionEvent actionEvent) { obSolicitacao = (Solicitacao) (listaSolicitacoes.getRowData()); }

E vc usa o objeto actionEvent?
isso não vai resolver seu problema, é apenas uma dica,
não precisar ter então, e lá no xhtml chamar o action mesmo.

[quote=kleberdamasco]E vc usa o objeto actionEvent?
isso não vai resolver seu problema, é apenas uma dica,
não precisar ter então, e lá no xhtml chamar o action mesmo. [/quote]

Realmente actionEvent nem tem utililidade nesse caso, então eu troquei para o action só para testar, e continua a mesma coisa.
Ao clicar no commandLink o método no value do dataTable é chamado cerca de 20 vezes.

[quote=marcos1EM][quote=kleberdamasco]você está utilizando o actionEvent no seu managedBean?
ponha o atributo process="@this" no seu commandLink[/quote]

Eu estou usando o actionEvent , no entanto, colocando o process="@this" no commandLink não funcionou.

Nessa caso, vou ficar com a sugestão dada pelo Hebert, apesar de que acho que seria mais interessante se problema pudesse ser tratado na view pelo primefaces.

Obrigado.[/quote]Isso não é problema, é comportamento de um framework component based.

Isso é o comportamento esperado.

O que eu costumo fazer e colocar no value do datatable sempre uma propriedade, que e representada no bean por um metodo get que simplesmente retorna uma lista. O metodo que efetivamente faz a busca no banco eu coloco em um postconstruct ou entao num daqueles f:event preRenderView.

Como o Hebert disse, e da natureza do JSF chamar varias vezes o metodo que popula a tabela, por isso evite colocar consulta ao banco nesses metodos.

Entendido, Obrigado pelas dicas!