我使用POI& Itext jar将Data导出为PDF或Excel文件,我想生成一个包含datatable数据的报告,但这是我得到的结果
如您所见,字段包含变量而不是数据表中的数据。
我希望该文件包含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>
我很感激您的反馈。
答案 0 :(得分:0)
你应该在开头实例化Formateur,如:
private Formateur formateur = new Formateur();
当你调用它的getter时,你正在检查formateur是否为null,但它尚未初始化。据我所知,这可能是问题所在。我不确定你是否可以检查一个对象是否为null,如果它甚至没有被创建/初始化。所以,也许尝试在声明本身中初始化它或尝试删除检查它是否为空的条件。
答案 1 :(得分:-1)
这是因为您打印变量而不是具有字段VALUE的outputtext。我花了两个小时才搞清楚。
而不是
#{formateur.adresse}
写
<h:outputText value="#{formateur.adresse}" />