Problema com poll - primefaces 3

2 respostas
novellietibr

Pessoal, preciso de uma pequena ajuda de vocês.

Estou trabalhando num sistema que tem, em uma página, um dataTable para listagem de itens com possibilidade de selecionar múltiplos registros. Nesta mesma página existe um poll que é executado automaticamente a cada 30 segundos e atualiza essa dataTable.

Está acontecendo que, ao selecionar um registro qualquer da lista, quando o poll é executado, todos os demais registros são selecionados automaticamente, como se copiassem o status desse registro que foi selecionado. O inverso também acontece, ou seja, se seleciono todos e depois desmarco um único registro, quando o poll é executado todos os demais registros são desmarcados.

Acho estranho esse comportamento, pois no primefaces 2 estava funcionando corretamente. O problema apareceu ao migrar para o primefaces 3.0. Alguém sabe me dizer o que deve estar errado com esse processo?

Segue parte dos códigos para análise:

Poll:

<p:poll id="poll"
                interval="30"
                listener="#{buildController.refresh()}"
                update=":frm:dtAtualizacao :form_msg:messages" />

dataTable:

<p:dataTable id="dtAtualizacao"
                     emptyMessage="Nenhum registro encontrado."
                     var="item"
                     value="#{buildController.solicitacoes}"
                     selection="#{buildController.registrosSelecionados}"
                     rowKey="#{buildController.atunif}"
                     rowStyleClass="#{item.stSolicitacao eq 'C' ? 'atucomect' :
                                      item.stSolicitacao eq 'T' ? 'atuemteste' :
                                      item.stSolicitacao eq 'A' ? 'atuaprovada' :
                                      item.stSolicitacao eq 'R' ? 'aturefluxo' :
                                      null}">

Qualquer dica é bem vinda. Obrigado.

2 Respostas

E

Existe um bug no selecionar do datatable. Talvez esteja influenciando no seu caso.
Veja: http://forum.primefaces.org/viewtopic.php?f=3&t=24144

novellietibr

Finalmente consegui resolver.

Com a ajuda de um colega de trabalho, reparamos que o componente poll estava no mesmo form que o componente dataTable.

Apenas joguei o poll em um form separado e o problema foi resolvido.

<h:form id="frmpoll">   
        <p:poll id="poll"
                interval="30"
                action="#{buildController.refresh()}"
                update=":frm:dtAtualizacao :form_msg:messages" />
      </h:form>

<h:form id="frm" prependId="false">
<p:dataTable id="dtAtualizacao"
                     widgetVar="dataTabelAtualizacao"
                     emptyMessage="Nenhum registro encontrado."
                     var="item"
                     value="#{buildController.solicitacoes}"
                     selection="#{buildController.registrosSelecionados}"
                     rowKey="#{buildController.atunif}"
                     rowStyleClass="#{item.stSolicitacao eq 'C' ? 'atucomect' :
                                      item.stSolicitacao eq 'T' ? 'atuemteste' :
                                      item.stSolicitacao eq 'A' ? 'atuaprovada' :
                                      item.stSolicitacao eq 'R' ? 'aturefluxo' :
                                      null}">
            
            <p:column selectionMode="multiple" />
            
            <p:column style="text-align: right;"
                      headerText="Solic.">
                <h:outputLink  target="_blank"
                              value="http://sds.com.br:7777/pls/show_solic_v2?i_nr_solicitacao=#{item.nrSolicitacao}">
                    <h:outputText value="#{item.nrSolicitacao}"/>
                </h:outputLink>
            </p:column>
    </h:dataTable>
</h:form>

Agradeço a ajuda.

Criado 24 de agosto de 2012
Ultima resposta 24 de ago. de 2012
Respostas 2
Participantes 2