Mettre à jour un dataTable avec le composant Poll de Primefaces

Le but est de mettre à jour un tableau de données en temps réel dans une vue à l'aide de composants Primefaces.

On utilise le framework Primefaces 3.4 avec JSF 2.0 ainsi que Spring-webflow

Dans cet exemple on imagine que l’on a une liste de personnes mise à jour en tâche de fond et que l’on veut avoir l’affichage en temps réel de la liste.

Pré-requis important pour la vue :
Il faut que le head de la page soit définit de cette manière :

<h:head></h:head>

et le body de cette manière :

<h:body></h:body>

La vue

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:c="http://java.sun.com/jstl/core"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
  template="/WEB-INF/models/standard-model.xhtml">

  <ui:define name="context" style="width: 800px;">
    <h:form id="formPersons">

      <p:poll interval="3" update="dataTablePersons" />

      <p:dataTable id="dataTablePersons" var="person"
        value="#{personsForm.persons}" scrollable="false"
        paginator="true" rows="25"
        paginatorTemplate="{CurrentPageReport} {FirstPageLink} 
          {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}">

        <p:column width="300" headerText="First Name" footerText="">
          <h:outputText value="#{person.firstName}" />
          <f:facet name="footer">

          </f:facet>
        </p:column>

        <p:column width="300" headerText="Last Name" footerText="">
          <h:outputText value="#{person.lastName}" />
          <f:facet name="footer">

          </f:facet>
        </p:column>

        <p:column width="135" headerText="Age" footerText="">
          <h:outputText value="#{person.age}" />
          <f:facet name="footer">

          </f:facet>
        </p:column>
      </p:dataTable>


    </h:form>
  </ui:define>
</ui:composition>

Attention la référence à la liste doit être un singleton.
Il ne faut pas faire l’erreur de renvoyer une instance différente à chaque fois ou de la ré-initialiser.

Le bean

package com.sandbox.poll.ihm.impl;

import java.io.Serializable;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sandbox.poll.ihm.PersonsForm;
import com.sandbox.poll.model.Person;
import com.sandbox.poll.model.PollStatus;

public class PersonsFormImpl 
implements PersonsForm, Serializable 
{
	private static final long serialVersionUID = 4141208079593314631L;

	private List<Person> persons = null;
	
	@Override
	public List<Person> getPersons() 
	{
		return persons;
	}

	@Override
	public void setPersons(List<Person> persons) 
	{
		this.persons = persons;
	}
}

Pour trouver le code complet cliquez ici.

2 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.