Atualizar dataTable pelo ManagerBean JSF + Primefaces

Boa tarde, tenho um dataTable e gostaria de atualizar os dados deles pelo ManagerBean, pois eu carrego a sua lista conforme dados trazidos pelo banco de dados, no qual eu busco esses dados a cada 1 segundo, ou seja, em uma Thread.

Abraços.

Valério, para atualizar um datatable pelo managedbean é bem simples. Você já possui o método que traz os dados do datatable correto? E pelo que você falou, também possui a thread que roda de segundo em segundo correto?

O managedBean armazena os valores como se fosse um aplicativo desktop, então, o valor que sempre será retornado será o que está armazenado dentro da lista que é carregada. Até aqui sem problemas creio eu :smiley:

Para que funcione a atualização, que provavelmente você já colocou na thread mas o datatable não é atualizado, é chamar o update no componente via managedbean, que pode ser realizado com RequestContext do primefaces linkado ao datatable.

RequestContext.getCurrentInstance().update("idDoDatatable");

não se se você esta utilizando o datatable do JSF nativo, Primefaces, Rich, Ice, etc., mas no caso de ser de forma nativa ou outra suite de componentes (tenho experiencia com o primefaces apenas :D), realize de forma nativa:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("idDoDatatable");

Obrigado André, quando chegar em casa vou testar a segunda maneira(a nativa), pois a primeira que é a do primefaces, eu testei e reclamava de null. :frowning: Como se não existisse algum componente com a id que passei por parâmetro, no caso eu uso Template, será que pode ter algo a ver ?

Não tem problema não, mas lembre-se que o para acessar um ID “puro”, no teu form você deve adicionar a propriedade prependId=“false” para que você acesse o id diretamente, caso contrário, você deve passar o caminho inteiro da tabela “:form:idDiv:outraDiv:idDoDatatable” entendeu?

ID = tabela

<h:form prependId="false">
   <p:datatable id="tabela"/>
</h:form>

ID= :umaDiv:tabela

<h:form>
   <h:panelGroup layout="block" id="umaDiv">
      <p:datatable id="tabela"/>
   </h:panelGroup>
</h:form>

isso no cado de utilizar o RequestContext do primeface

então provavelmente é isso. No caso eu tenho no template um form que contem os menus do primefaces para chamar as telas e tal. E no xhtml consulta tenho outro form, eu devo passa o caminho a partir do segundo form né ?

Obs: O segundo form não está dentro do primeiro.

A melhor forma de você conferir o nome completo do seu componente é utilizando o firebug. Inspecione o teu datatable e confira o ID que está lá, basta copiá-lo e colocar no RequestContext…(“ID”);

Olá … estava tendo o mesmo problema… graças ao seu post eu consegui corrigir, mas ainda to tendo um probleminha…

quando faço esse ‘update’ ( FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(“idDoDatatable”); ), ele tira minha formatação da dataTable… acredito que porque ele esteja dentro de uma TAB …

saberia me da alguma informação de como corrigir ??

Desde já, Grato!