使用Primefaces将dataTable导出为Excel和PDF

时间:2013-08-15 16:58:30

标签: primefaces apache-poi itext

我使用POI& Itext jar将Data导出为PDF或Excel文件,我想生成一个包含datatable数据的报告,但这是我得到的结果

http://hpics.li/3653d83

如您所见,字段包含变量而不是数据表中的数据。

我希望该文件包含id,name,email等数据......请提出任何建议

这是我的FormateurController.java

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<Formateur> 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<Formateur> 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<Formateur> getFilteredFormateurs() {
        return filteredFormateurs;
    }

    public void setFilteredFormateurs(List<Formateur> 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 < 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"; 
    }


}

这是我的index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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">
    <h:head>
        <title>Gestion de réservation pour une formation</title>
    </h:head>
    <h:body>
        <p:layout fullPage="true">
            <p:layoutUnit position="north" size="150">
                <center>  <h1>Gestion de réservation pour une formation</h1></center>
            </p:layoutUnit>
            <p:layoutUnit position="west" size="200"  rendered="true" collapsible="true" resizable="true" closable="true" header="menu">
                <h:form>
                    <p:commandLink value="Nouveau formateur" actionListener="#{formateurController.preparerajouterFormateur(actionEvent)}" onclick="dlgFormateur.show();" />
                </h:form>
            </p:layoutUnit>
            <p:layoutUnit position="center">
                <h:form id="form">
                    <p:dialog widgetVar="dlgFormateur" resizable="false"  height="400" width="450" header="Ajout formateur" position="center">

                    <p:panelGrid columns="2">
                        <h:outputText value="nom"/>
                        <p:inputText id="adresse2" value="#{formateurController.formateurs.adresse}"/>

                        <h:outputText value="cin"/>
                        <p:inputText id="cin2" value="#{formateurController.formateurs.cin}"/>

                        <h:outputText value="email"/>
                        <p:inputText id="email2" value="#{formateurController.formateurs.email}"/>

                        <h:outputText value="nom"/>
                        <p:inputText id="nom2" value="#{formateurController.formateurs.nom}"/>

                        <h:outputText value="prenom"/>
                        <p:inputText id="prenom2" value="#{formateurController.formateurs.prenom}"/>

                        <h:outputText value="pseudo"/>
                        <p:inputText id="pseudo2" value="#{formateurController.formateurs.pseudo}"/>

                        <h:outputText value="sexe"/>
                        <p:inputText id="sexe2" value="#{formateurController.formateurs.sexe}"/>

                        <h:outputText value="telephone"/>
                        <p:inputText id="telephone2" value="#{formateurController.formateurs.telephone}"/>

                        <p:commandButton value="enregistrer" id="eng" actionListener="#{formateurController.ajouter(actionEvent)}" update="dataformateur" oncomplete="dlgFormateur.hide()"/>

                    </p:panelGrid> 

                </p:dialog>

                    <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">
                        <p:ajax event="rowSelect" update=":form:display" oncomplete="formateurDialog.show()" />  
                        <f:facet name="header">  
                            List of Formateurs  
                        </f:facet> 

                        <p:column headerText="Id" sortBy="#{formateur.formateurId}" filterBy="#{formateur.formateurId}" id="id_formateur">  
                            #{formateur.formateurId}  
                        </p:column>  

                        <p:column headerText="Adresse" sortBy="#{formateur.adresse}" filterBy="#{formateur.adresse}" id="adresse">  
                            #{formateur.adresse}  
                        </p:column>  

                        <p:column headerText="CIN" sortBy="#{formateur.cin}" filterBy="#{formateur.cin}" id="cin">  
                            #{formateur.cin}  
                        </p:column>  

                        <p:column headerText="Email" sortBy="#{formateur.email}" filterBy="#{formateur.email}" id="email">  
                            #{formateur.email}  
                        </p:column> 
                        <p:column headerText="Nom" sortBy="#{formateur.nom}" filterBy="#{formateur.nom}" id="nom">  
                            #{formateur.nom}  
                        </p:column>
                        <p:column headerText="Prenom" sortBy="#{formateur.prenom}" filterBy="#{formateur.prenom}" id="prenom">  
                            #{formateur.prenom}  
                        </p:column>
                        <p:column headerText="Pseudo" sortBy="#{formateur.pseudo}" filterBy="#{formateur.pseudo}" id="pseudo">  
                            #{formateur.pseudo}  
                        </p:column>
                        <p:column headerText="Sexe" sortBy="#{formateur.sexe}" filterBy="#{formateur.sexe}" id="sexe">  
                            #{formateur.sexe}  
                        </p:column>
                        <p:column headerText="Telephone" sortBy="#{formateur.telephone}" filterBy="#{formateur.telephone}" id="telephone">  
                            #{formateur.telephone}  
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Excluir" />
                            </f:facet>
                            <p:commandLink value="Excluir" action="#{formateurController.exclure()}" onclick="if(!confirm('Existe déjà #{formateur.nom}?'))return false;" update ="dataformateur"/>
                        </p:column>



                    </p:dataTable>

                    <h:panelGrid columns="2">  
                        <p:panel header="Export All Data">  
                            <h:commandLink>  
                                <p:graphicImage value="/images/excel.png" />  
                                <p:dataExporter type="xls" target="dataformateur" fileName="formateurs" postProcessor="#{formateurController.postProcessXLS}" />  
                            </h:commandLink>  

                            <h:commandLink>  
                                <p:graphicImage value="/images/pdf.png" />  
                                <p:dataExporter type="pdf" target="dataformateur" fileName="formateurs"/>  
                            </h:commandLink>  

                            <h:commandLink>  
                                <p:graphicImage value="/images/csv.png" />  
                                <p:dataExporter type="csv" target="formateur" fileName="formateurs" />  
                            </h:commandLink>  

                            <h:commandLink>  
                                <p:graphicImage value="/images/xml.png" />  
                                <p:dataExporter type="xml" target="formateur" fileName="formateurs" />  
                            </h:commandLink>  
                        </p:panel>  

                        <p:panel header="Export Page Data">  
                            <h:commandLink>  
                                <p:graphicImage value="/images/excel.png" />  
                                <p:dataExporter type="xls" target="formateur" fileName="formateurs" pageOnly="true"/>  
                            </h:commandLink>  

                            <h:commandLink>  
                                <p:graphicImage value="/images/pdf.png" />  
                                <p:dataExporter type="pdf" target="formateur" fileName="formateurs" pageOnly="true"/>  
                            </h:commandLink>  

                            <h:commandLink>  
                                <p:graphicImage value="/images/csv.png" />  
                                <p:dataExporter type="csv" target="formateur" fileName="formateurs" pageOnly="true"/>  
                            </h:commandLink>  

                            <h:commandLink>  
                                <p:graphicImage value="/images/xml.png" />  
                                <p:dataExporter type="xml" target="formateur" fileName="formateurs" pageOnly="true"/>  
                            </h:commandLink>  
                        </p:panel>  
                    </h:panelGrid>  


                    <p:dialog header="Formateur Detail" widgetVar="formateurDialog" resizable="false"  
                              width="300" showEffect="explode" hideEffect="explode">  



                            <p:dataList id="display"  
                                        value="#{formateurController.selectedFormateurs}"  
                                        var="selectedFormateur" type="definition">  

                                Id: #{selectedFormateur.formateurId}, Adresse: #{selectedFormateur.adresse}  

                            </p:dataList> 



                    </p:dialog>  




                </h:form>
            </p:layoutUnit>
        </p:layout>
    </h:body>
</html>

我很感激您的反馈。

2 个答案:

答案 0 :(得分:0)

你应该在开头实例化Formateur,如:

 private Formateur formateur = new Formateur();

当你调用它的getter时,你正在检查formateur是否为null,但它尚未初始化。据我所知,这可能是问题所在。我不确定你是否可以检查一个对象是否为null,如果它甚至没有被创建/初始化。所以,也许尝试在声明本身中初始化它或尝试删除检查它是否为空的条件。

答案 1 :(得分:-1)

这是因为您打印变量而不是具有字段VALUE的outputtext。我花了两个小时才搞清楚。

而不是

#{formateur.adresse}

<h:outputText value="#{formateur.adresse}" />