title: Export your dataTable to Excel and PDF using Primefaces
body: <p>I use POI &amp; Itext jar to export Data to PDF or Excel file, I would like to generate a report that contain the data from datatable, but here is what I got as result</p>
  
  <p><a href="http://hpics.li/3653d83" rel="nofollow">http://hpics.li/3653d83</a></p>
  
  <p>As you see, fields contain variable not the data from datatable.</p>
  
  <p>I would like that file containe data like id, name, email... Please any suggestion</p>
  
  <p>This is my FormateurController.java</p>
  
  <pre><code>package com.controller;
  
  import com.dao.FormateurDao;
  import com.dao.InterfaceFormateur;
  import com.lowagie.text.BadElementException;
  import com.lowagie.text.Document;
  import com.lowagie.text.DocumentException;
  import com.lowagie.text.Image;
  import com.lowagie.text.PageSize;
  import com.model.Formateur;
  import java.awt.event.ActionEvent;
  import java.io.File;
  import java.io.IOException;
  import java.util.List;
  import javax.faces.bean.ManagedBean;
  import javax.faces.bean.SessionScoped;
  import javax.faces.context.FacesContext;
  import javax.faces.model.DataModel;
  import javax.faces.model.ListDataModel;
  import javax.servlet.ServletContext;
  import org.apache.poi.hssf.usermodel.HSSFCell;
  import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  import org.apache.poi.hssf.usermodel.HSSFRow;
  import org.apache.poi.hssf.usermodel.HSSFSheet;
  import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  import org.apache.poi.hssf.util.HSSFColor;
  
  /**
   *
   * @author Ucf
   */
  
  @ManagedBean
  @SessionScoped
  public class FormateurController {
  
      private Formateur formateur;
      private DataModel listFormateurs;
      private Formateur selectedFormateur;  
      private Formateur[] selectedFormateurs;
      private List&lt;Formateur&gt; filteredFormateurs; 
  
      public Formateur getFormateurs() {
          if(this.formateur == null){
              this.formateur = new Formateur();
          }
          return formateur;
      }
  
      public void setFormateurs(Formateur formateur) {
          this.formateur = formateur;
      }
  
      public DataModel getListFormateurs() {
  
          List&lt;Formateur&gt; lista = new FormateurDao().list();
          listFormateurs = new  ListDataModel(lista);
          return listFormateurs;
      }
  
      public void preparerajouterFormateur(ActionEvent actionEvent){
          formateur = new Formateur();
  
      }
      public void preparermodifierFormateur(ActionEvent actionEvent){
          formateur = (Formateur)(listFormateurs.getRowData());
  
      }
      public void ajouter(ActionEvent actionEvent){
          InterfaceFormateur dao = new FormateurDao();
          dao.enregistrer(formateur);
      }
  
      public void modifier(ActionEvent actionEvent){
          InterfaceFormateur dao = new FormateurDao();
          dao.actualiser(formateur);
      }
  
      public String exclure(){
          Formateur employers = (Formateur)(listFormateurs.getRowData());
          InterfaceFormateur dao = new FormateurDao();
          dao.supprimer(employers);
          return "index";
      }
  
      public Formateur getSelectedFormateur() {
          return selectedFormateur;
      }
  
      public void setSelectedFormateur(Formateur selectedFormateur) {
          this.selectedFormateur = selectedFormateur;
      }
  
      public List&lt;Formateur&gt; getFilteredFormateurs() {
          return filteredFormateurs;
      }
  
      public void setFilteredFormateurs(List&lt;Formateur&gt; filteredFormateurs) {
          this.filteredFormateurs = filteredFormateurs;
      }
  
      public Formateur[] getSelectedFormateurs() {
          return selectedFormateurs;
      }
  
      public void setSelectedFormateurs(Formateur[] selectedFormateurs) {
          this.selectedFormateurs = selectedFormateurs;
      }
  
  
  
  
  
      public void postProcessXLS(Object document) {  
      HSSFWorkbook wb = (HSSFWorkbook) document;  
      HSSFSheet sheet = wb.getSheetAt(0);  
      HSSFRow header = sheet.getRow(0);  
  
      HSSFCellStyle cellStyle = wb.createCellStyle();    
      cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);  
      cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
  
      for(int i=0; i &lt; header.getPhysicalNumberOfCells();i++) {  
          HSSFCell cell = header.getCell(i);  
  
          cell.setCellStyle(cellStyle);  
      }  
  }  
  
  public void preProcessPDF(Object document) throws IOException, BadElementException, DocumentException {  
      Document pdf = (Document) document;  
      pdf.open();  
      pdf.setPageSize(PageSize.A4);  
  
      ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();  
      String logo = servletContext.getRealPath("") + File.separator + "images" + File.separator + "ACTUS-0-740-econocom-logo.gif";  
  
      pdf.add(Image.getInstance(logo));  
  }  
  
  
  
  
      public String  redirectFormateur(){
          return "ModifierFournisseur.xhtml"; 
      }
  
  
  }
  </code></pre>
  
  <p>this is my index.xhtml</p>
  
  <pre><code>&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
  &lt;html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://xmlns.jcp.org/jsf/html"
        xmlns:p="http://primefaces.org/ui"
        xmlns:f="http://xmlns.jcp.org/jsf/core"&gt;
      &lt;h:head&gt;
          &lt;title&gt;Gestion de réservation pour une formation&lt;/title&gt;
      &lt;/h:head&gt;
      &lt;h:body&gt;
          &lt;p:layout fullPage="true"&gt;
              &lt;p:layoutUnit position="north" size="150"&gt;
                  &lt;center&gt;  &lt;h1&gt;Gestion de réservation pour une formation&lt;/h1&gt;&lt;/center&gt;
              &lt;/p:layoutUnit&gt;
              &lt;p:layoutUnit position="west" size="200"  rendered="true" collapsible="true" resizable="true" closable="true" header="menu"&gt;
                  &lt;h:form&gt;
                      &lt;p:commandLink value="Nouveau formateur" actionListener="#{formateurController.preparerajouterFormateur(actionEvent)}" onclick="dlgFormateur.show();" /&gt;
                  &lt;/h:form&gt;
              &lt;/p:layoutUnit&gt;
              &lt;p:layoutUnit position="center"&gt;
                  &lt;h:form id="form"&gt;
                      &lt;p:dialog widgetVar="dlgFormateur" resizable="false"  height="400" width="450" header="Ajout formateur" position="center"&gt;
  
                      &lt;p:panelGrid columns="2"&gt;
                          &lt;h:outputText value="nom"/&gt;
                          &lt;p:inputText id="adresse2" value="#{formateurController.formateurs.adresse}"/&gt;
  
                          &lt;h:outputText value="cin"/&gt;
                          &lt;p:inputText id="cin2" value="#{formateurController.formateurs.cin}"/&gt;
  
                          &lt;h:outputText value="email"/&gt;
                          &lt;p:inputText id="email2" value="#{formateurController.formateurs.email}"/&gt;
  
                          &lt;h:outputText value="nom"/&gt;
                          &lt;p:inputText id="nom2" value="#{formateurController.formateurs.nom}"/&gt;
  
                          &lt;h:outputText value="prenom"/&gt;
                          &lt;p:inputText id="prenom2" value="#{formateurController.formateurs.prenom}"/&gt;
  
                          &lt;h:outputText value="pseudo"/&gt;
                          &lt;p:inputText id="pseudo2" value="#{formateurController.formateurs.pseudo}"/&gt;
  
                          &lt;h:outputText value="sexe"/&gt;
                          &lt;p:inputText id="sexe2" value="#{formateurController.formateurs.sexe}"/&gt;
  
                          &lt;h:outputText value="telephone"/&gt;
                          &lt;p:inputText id="telephone2" value="#{formateurController.formateurs.telephone}"/&gt;
  
                          &lt;p:commandButton value="enregistrer" id="eng" actionListener="#{formateurController.ajouter(actionEvent)}" update="dataformateur" oncomplete="dlgFormateur.hide()"/&gt;
  
                      &lt;/p:panelGrid&gt; 
  
                  &lt;/p:dialog&gt;
  
                      &lt;p:dataTable id="dataformateur" value="#{formateurController.listFormateurs}" var="formateur" rowKey="#{formateur.formateurId}" paginator="true" rows="10" selection="#{formateurController.selectedFormateurs}" selectionMode="multiple" filteredValue="#{formateurController.filteredFormateurs}" rowsPerPageTemplate="5,10,20,30"&gt;
                          &lt;p:ajax event="rowSelect" update=":form:display" oncomplete="formateurDialog.show()" /&gt;  
                          &lt;f:facet name="header"&gt;  
                              List of Formateurs  
                          &lt;/f:facet&gt; 
  
                          &lt;p:column headerText="Id" sortBy="#{formateur.formateurId}" filterBy="#{formateur.formateurId}" id="id_formateur"&gt;  
                              #{formateur.formateurId}  
                          &lt;/p:column&gt;  
  
                          &lt;p:column headerText="Adresse" sortBy="#{formateur.adresse}" filterBy="#{formateur.adresse}" id="adresse"&gt;  
                              #{formateur.adresse}  
                          &lt;/p:column&gt;  
  
                          &lt;p:column headerText="CIN" sortBy="#{formateur.cin}" filterBy="#{formateur.cin}" id="cin"&gt;  
                              #{formateur.cin}  
                          &lt;/p:column&gt;  
  
                          &lt;p:column headerText="Email" sortBy="#{formateur.email}" filterBy="#{formateur.email}" id="email"&gt;  
                              #{formateur.email}  
                          &lt;/p:column&gt; 
                          &lt;p:column headerText="Nom" sortBy="#{formateur.nom}" filterBy="#{formateur.nom}" id="nom"&gt;  
                              #{formateur.nom}  
                          &lt;/p:column&gt;
                          &lt;p:column headerText="Prenom" sortBy="#{formateur.prenom}" filterBy="#{formateur.prenom}" id="prenom"&gt;  
                              #{formateur.prenom}  
                          &lt;/p:column&gt;
                          &lt;p:column headerText="Pseudo" sortBy="#{formateur.pseudo}" filterBy="#{formateur.pseudo}" id="pseudo"&gt;  
                              #{formateur.pseudo}  
                          &lt;/p:column&gt;
                          &lt;p:column headerText="Sexe" sortBy="#{formateur.sexe}" filterBy="#{formateur.sexe}" id="sexe"&gt;  
                              #{formateur.sexe}  
                          &lt;/p:column&gt;
                          &lt;p:column headerText="Telephone" sortBy="#{formateur.telephone}" filterBy="#{formateur.telephone}" id="telephone"&gt;  
                              #{formateur.telephone}  
                          &lt;/p:column&gt;
                          &lt;p:column&gt;
                              &lt;f:facet name="header"&gt;
                                  &lt;h:outputText value="Excluir" /&gt;
                              &lt;/f:facet&gt;
                              &lt;p:commandLink value="Excluir" action="#{formateurController.exclure()}" onclick="if(!confirm('Existe déjà #{formateur.nom}?'))return false;" update ="dataformateur"/&gt;
                          &lt;/p:column&gt;
  
  
  
                      &lt;/p:dataTable&gt;
  
                      &lt;h:panelGrid columns="2"&gt;  
                          &lt;p:panel header="Export All Data"&gt;  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/excel.png" /&gt;  
                                  &lt;p:dataExporter type="xls" target="dataformateur" fileName="formateurs" postProcessor="#{formateurController.postProcessXLS}" /&gt;  
                              &lt;/h:commandLink&gt;  
  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/pdf.png" /&gt;  
                                  &lt;p:dataExporter type="pdf" target="dataformateur" fileName="formateurs"/&gt;  
                              &lt;/h:commandLink&gt;  
  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/csv.png" /&gt;  
                                  &lt;p:dataExporter type="csv" target="formateur" fileName="formateurs" /&gt;  
                              &lt;/h:commandLink&gt;  
  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/xml.png" /&gt;  
                                  &lt;p:dataExporter type="xml" target="formateur" fileName="formateurs" /&gt;  
                              &lt;/h:commandLink&gt;  
                          &lt;/p:panel&gt;  
  
                          &lt;p:panel header="Export Page Data"&gt;  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/excel.png" /&gt;  
                                  &lt;p:dataExporter type="xls" target="formateur" fileName="formateurs" pageOnly="true"/&gt;  
                              &lt;/h:commandLink&gt;  
  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/pdf.png" /&gt;  
                                  &lt;p:dataExporter type="pdf" target="formateur" fileName="formateurs" pageOnly="true"/&gt;  
                              &lt;/h:commandLink&gt;  
  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/csv.png" /&gt;  
                                  &lt;p:dataExporter type="csv" target="formateur" fileName="formateurs" pageOnly="true"/&gt;  
                              &lt;/h:commandLink&gt;  
  
                              &lt;h:commandLink&gt;  
                                  &lt;p:graphicImage value="/images/xml.png" /&gt;  
                                  &lt;p:dataExporter type="xml" target="formateur" fileName="formateurs" pageOnly="true"/&gt;  
                              &lt;/h:commandLink&gt;  
                          &lt;/p:panel&gt;  
                      &lt;/h:panelGrid&gt;  
  
  
                      &lt;p:dialog header="Formateur Detail" widgetVar="formateurDialog" resizable="false"  
                                width="300" showEffect="explode" hideEffect="explode"&gt;  
  
  
  
                              &lt;p:dataList id="display"  
                                          value="#{formateurController.selectedFormateurs}"  
                                          var="selectedFormateur" type="definition"&gt;  
  
                                  Id: #{selectedFormateur.formateurId}, Adresse: #{selectedFormateur.adresse}  
  
                              &lt;/p:dataList&gt; 
  
  
  
                      &lt;/p:dialog&gt;  
  
  
  
  
                  &lt;/h:form&gt;
              &lt;/p:layoutUnit&gt;
          &lt;/p:layout&gt;
      &lt;/h:body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>I'd be grateful for your feedback.</p>