Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 PrimeFaces从Lazyloading数据表导出数据_Jsf 2_Primefaces_Datatable_Lazy Loading_Data Export - Fatal编程技术网

Jsf 2 PrimeFaces从Lazyloading数据表导出数据

Jsf 2 PrimeFaces从Lazyloading数据表导出数据,jsf-2,primefaces,datatable,lazy-loading,data-export,Jsf 2,Primefaces,Datatable,Lazy Loading,Data Export,我想导出一个在报告生成期间具有LazyLoad数据模型的数据表(带分页) 问题: 当我导出时,报表将从数据库逐页生成,然后导出到Excel/PDF,这会占用更多的时间。我希望通过跳过数据集的逐页生成,在单个数据库访问中获得它 我正在生成代码片段,如下所示: JSF: <p:dataTable id="dTable" var="dev" value="#{ReportAction.lazyModel}" styleClass ="table_paginator" rowKey="#{

我想导出一个在报告生成期间具有LazyLoad数据模型的数据表(带分页)

问题: 当我导出时,报表将从数据库逐页生成,然后导出到Excel/PDF,这会占用更多的时间。我希望通过跳过数据集的逐页生成,在单个数据库访问中获得它

我正在生成代码片段,如下所示:

JSF:

<p:dataTable id="dTable" var="dev" value="#{ReportAction.lazyModel}"
    styleClass ="table_paginator" rowKey="#{device.macAddress}" paginatorPosition="bottom"
    paginator="true" rowsPerPageTemplate="10,20,30" rows="10" lazy="true" 
    paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
    emptyMessage="Select appropriate conditions and click 'Generate Report'">

    <f:facet name="header">
        <h:commandLink actionListener="#{ReportAction.doExport}">
            <p:graphicImage value="../../../resources/images/excel.png"
                alt="XLS" style="float:right;width:32px;height:32px" />
            <p:dataExporter type="xls" target="dTable" fileName="#{ReportAction.fileName}"
                            preProcessor="#{ReportAction.preProcess}"
                            postProcessor="#{ReportAction.postProcessXLS}"  />
        </h:commandLink>
    </f:facet>

    <!-- All the columns in Data Table  -->

</p:dataTable>

托管Bean:

public class ReportAction {


    private ConfigurationReportDataModel mediumConfigModel;
    private List<FieldReportModel> configModelList;
    private String fileName;
    private LazyDataModel<ConfigurationReportModel> lazyModel;
    private boolean export; 

    public ReportAction() {

        configModelList = new ArrayList<ConfigurationReportModel>();
        export = false;
        mediumConfigModel = new ReportDataModel();      

    }

    public void generateFieldReport() {

        lazyFieldModel = new ConfigurationReportDataModel(day, fromDate,
                location,store,engineer, status, toDate, export);

    }

    public void preProcess(Object document)     {

        export = true;

        log.info("preProcess::Lazy model : Page Sizing");
        if(lazyFieldModel != null)  {
            lazyFieldModel.setPageSize(1000000);

        }

        log.info("preProcess::Export All Details");
        mediumConfigModel.setExport(true);

    }

    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.setCellValue(cell.getStringCellValue().toUpperCase());
            cell.setCellStyle(cellStyle);

            sheet.autoSizeColumn(i);
        }

        export = false;
        mediumConfigModel.setExport(false);
    }


    public List<ConfigurationReportModel> getConfigModelList() {
        return configModelList;
    }

    public void setConfigModelList(
            ArrayList<ConfigurationReportModel> configModelList) {
        this.configModelList = configModelList;
    }


    public String getFileName() {
        SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyy_HHmmss");
        fileName = "Config_Report_".concat(formatter.format(new Date()));

        return fileName;
    }


    public void setMediumConfigModel(
            ConfigurationReportDataModel mediumConfigModel) {
        this.mediumConfigModel = mediumConfigModel;
    }


    public void setConfigModelList(
            List<ConfigurationReportModel> configModelList) {
        this.configModelList = configModelList;
    }

    public LazyDataModel<ConfigurationReportModel> getLazyFieldModel() {

        log.info("##########getLazyFieldModel###########");

        if(export)  {
            log.info("getLazyFieldModel::Will get Exported........");
            lazyFieldModel = new ConfigurationReportDataModel(day, fromDate,
                    location, store, engineer, status, toDate, true);
            lazyFieldModel.load(1, 1000000000, null, null, null);
        }

        return lazyFieldModel;
    }

    public void setLazyFieldModel(
            LazyDataModel<ConfigurationReportModel> lazyFieldModel) {
        this.lazyFieldModel = lazyFieldModel;
    }

  }
public class ConfigurationReportDataModel extends
        LazyDataModel<ConfigurationReportModel> {

    private List<ConfigurationReportModel> configReport;

    private boolean export; 

    public ConfigurationReportDataModel() {
        this.export = false; 

    }

    public List<ConfigurationReportModel> load(int first, int pageSize,
            String sortField, SortOrder sortOrder, Map<String, String> filters) {


        UIClient client = new UIClient();
        ReportData data = null;
        // ///////////////////

        if(export)      {
            log.info("Do Export....");
            first = 1;
            pageSize = 1000000000; 
        }

        deviceList = new ArrayList<DeviceGlobal>();

        // Retrieves data from Database with the number of record (page size)
        data = client.generateFieldReport(first, pageSize,
                Integer.parseInt(location), Integer.parseInt(store),
                engineer, getTimeToBeginningOfDay(), getTimeToEndofDay(),
                status);


        log.info("Obtained data : " + data);

        if (data != null) {

            log.info("Got devices : " + data.getRecords().size());

            deviceList = (ArrayList<DeviceGlobal>) data.getRecords();

            // ///////////////////
            int record = first + 1;
            ConfigurationReportModel storeModel = null;
            DeviceGlobal deviceGlobal = null;

            configReport = new ArrayList<ConfigurationReportModel>();

            for (Iterator<DeviceGlobal> iterator = deviceList.iterator(); iterator
                    .hasNext();) {

                deviceGlobal = (DeviceGlobal) iterator.next();
                storeModel = new ConfigurationReportModel(deviceGlobal,
                        record++);

                configReport.add(storeModel);
            }

            log.info("Total Config Report : " + configReport.size());

            // rowCount
            int dataSize = data.getReportCount();
            this.setRowCount(dataSize);

            log.info("Report Count: " + data.getReportCount());

            if(export)  {

                return configReport;
            }
            else    {
                // paginate
                if (dataSize > pageSize) {
                    try {
                        return configReport;
                    } catch (IndexOutOfBoundsException e) {
                        return configReport;
                    }
                } else {
                    return configReport;
                }
            }

        } else {

            log.info("Got no devices");

            deviceList = new ArrayList<DeviceGlobal>();
            configReport = new ArrayList<ConfigurationReportModel>();

            this.setRowCount(0);

            return configReport;
        }
    }
}
公共类ReportAction{
私有配置报告数据模型mediumConfigModel;
私有列表配置模型列表;
私有字符串文件名;
私人LazyDataModel lazyModel;
私人布尔输出;
公共报告行动(){
configModelList=新的ArrayList();
导出=假;
mediumConfigModel=新的ReportDataModel();
}
public void generateFieldReport(){
lazyFieldModel=新配置报告数据模型(日期,起始日期,
位置、商店、工程师、状态、日期、出口);
}
公共作废预处理(对象文档){
导出=真;
info(“预处理::惰性模型:页面大小”);
如果(lazyFieldModel!=null){
lazyFieldModel.setPageSize(1000000);
}
log.info(“预处理::导出所有详细信息”);
mediumConfigModel.setExport(true);
}
公共无效后处理XLS(对象文档){
HSSF工作手册wb=(HSSF工作手册)文件;
HSSFSheet sheet=wb.getSheetAt(0);
HSSFRow标题=sheet.getRow(0);
HSSFCellStyle cellStyle=wb.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID\u前景);
对于(int i=0;i
数据模型:

public class ReportAction {


    private ConfigurationReportDataModel mediumConfigModel;
    private List<FieldReportModel> configModelList;
    private String fileName;
    private LazyDataModel<ConfigurationReportModel> lazyModel;
    private boolean export; 

    public ReportAction() {

        configModelList = new ArrayList<ConfigurationReportModel>();
        export = false;
        mediumConfigModel = new ReportDataModel();      

    }

    public void generateFieldReport() {

        lazyFieldModel = new ConfigurationReportDataModel(day, fromDate,
                location,store,engineer, status, toDate, export);

    }

    public void preProcess(Object document)     {

        export = true;

        log.info("preProcess::Lazy model : Page Sizing");
        if(lazyFieldModel != null)  {
            lazyFieldModel.setPageSize(1000000);

        }

        log.info("preProcess::Export All Details");
        mediumConfigModel.setExport(true);

    }

    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.setCellValue(cell.getStringCellValue().toUpperCase());
            cell.setCellStyle(cellStyle);

            sheet.autoSizeColumn(i);
        }

        export = false;
        mediumConfigModel.setExport(false);
    }


    public List<ConfigurationReportModel> getConfigModelList() {
        return configModelList;
    }

    public void setConfigModelList(
            ArrayList<ConfigurationReportModel> configModelList) {
        this.configModelList = configModelList;
    }


    public String getFileName() {
        SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyy_HHmmss");
        fileName = "Config_Report_".concat(formatter.format(new Date()));

        return fileName;
    }


    public void setMediumConfigModel(
            ConfigurationReportDataModel mediumConfigModel) {
        this.mediumConfigModel = mediumConfigModel;
    }


    public void setConfigModelList(
            List<ConfigurationReportModel> configModelList) {
        this.configModelList = configModelList;
    }

    public LazyDataModel<ConfigurationReportModel> getLazyFieldModel() {

        log.info("##########getLazyFieldModel###########");

        if(export)  {
            log.info("getLazyFieldModel::Will get Exported........");
            lazyFieldModel = new ConfigurationReportDataModel(day, fromDate,
                    location, store, engineer, status, toDate, true);
            lazyFieldModel.load(1, 1000000000, null, null, null);
        }

        return lazyFieldModel;
    }

    public void setLazyFieldModel(
            LazyDataModel<ConfigurationReportModel> lazyFieldModel) {
        this.lazyFieldModel = lazyFieldModel;
    }

  }
public class ConfigurationReportDataModel extends
        LazyDataModel<ConfigurationReportModel> {

    private List<ConfigurationReportModel> configReport;

    private boolean export; 

    public ConfigurationReportDataModel() {
        this.export = false; 

    }

    public List<ConfigurationReportModel> load(int first, int pageSize,
            String sortField, SortOrder sortOrder, Map<String, String> filters) {


        UIClient client = new UIClient();
        ReportData data = null;
        // ///////////////////

        if(export)      {
            log.info("Do Export....");
            first = 1;
            pageSize = 1000000000; 
        }

        deviceList = new ArrayList<DeviceGlobal>();

        // Retrieves data from Database with the number of record (page size)
        data = client.generateFieldReport(first, pageSize,
                Integer.parseInt(location), Integer.parseInt(store),
                engineer, getTimeToBeginningOfDay(), getTimeToEndofDay(),
                status);


        log.info("Obtained data : " + data);

        if (data != null) {

            log.info("Got devices : " + data.getRecords().size());

            deviceList = (ArrayList<DeviceGlobal>) data.getRecords();

            // ///////////////////
            int record = first + 1;
            ConfigurationReportModel storeModel = null;
            DeviceGlobal deviceGlobal = null;

            configReport = new ArrayList<ConfigurationReportModel>();

            for (Iterator<DeviceGlobal> iterator = deviceList.iterator(); iterator
                    .hasNext();) {

                deviceGlobal = (DeviceGlobal) iterator.next();
                storeModel = new ConfigurationReportModel(deviceGlobal,
                        record++);

                configReport.add(storeModel);
            }

            log.info("Total Config Report : " + configReport.size());

            // rowCount
            int dataSize = data.getReportCount();
            this.setRowCount(dataSize);

            log.info("Report Count: " + data.getReportCount());

            if(export)  {

                return configReport;
            }
            else    {
                // paginate
                if (dataSize > pageSize) {
                    try {
                        return configReport;
                    } catch (IndexOutOfBoundsException e) {
                        return configReport;
                    }
                } else {
                    return configReport;
                }
            }

        } else {

            log.info("Got no devices");

            deviceList = new ArrayList<DeviceGlobal>();
            configReport = new ArrayList<ConfigurationReportModel>();

            this.setRowCount(0);

            return configReport;
        }
    }
}
公共类配置ReportDataModel扩展
懒散数据模型{
私有列表报告;
私人布尔输出;
公共配置ReportDataModel(){
this.export=false;
}
公共列表加载(int-first,int-pageSize,
字符串排序字段、排序器排序器、映射过滤器){
UIClient=新UIClient();
ReportData数据=null;
// ///////////////////
国际单项体育联合会(出口){
log.info(“执行导出…”);
第一个=1;
页面大小=100000000;
}
deviceList=新的ArrayList();
//从数据库中检索具有记录数(页面大小)的数据
data=client.generateFieldReport(第一个,页面大小,
Integer.parseInt(位置),Integer.parseInt(存储),
工程师,getTimeToBeginingOfDay(),getTimeToEndofDay(),
地位);
日志信息(“获得的数据:+数据”);
如果(数据!=null){
log.info(“获取设备:+data.getRecords().size());
deviceList=(ArrayList)data.getRecords();
// ///////////////////
int记录=first+1;
ConfigurationReportModel storeModel=null;
DeviceGlobal DeviceGlobal=null;
configReport=新的ArrayList();
for(迭代器迭代器=deviceList.Iterator();迭代器
.hasNext();){
deviceGlobal=(deviceGlobal)迭代器.next();
storeModel=新配置报告模型(deviceGlobal,
记录++);
configReport.add(storeModel);
}
log.info(“总配置报告:+configReport.size());
//行数
int dataSize=data.getReportCount();
此.setRowCount(数据大小);
log.info(“报告计数:+data.getReportCount());
国际单项体育联合会(出口){
返回报告;
}
否则{
//分页
如果(数据大小>页面大小){
试一试{
返回报告;
}catch(IndexOutOfBoundsException e){
返回报告;
}
}否则{
返回报告;
}
}
}否则{
瞧