struts2+extjs

本文介绍了使用JavaScript和Java生成报表的方法。JavaScript部分通过Ext.XTemplate实现报表展示,而Java部分则利用JasperReports库结合数据库生成PDF及Word格式报表。文章详细展示了代码实现过程。
摘要由CSDN通过智能技术生成
  • 报表
  1. 无参数的Ext.XTemplate    
  • js页面这样写产生报表页面   需要导入jasperreports-2.0.3.jar包

var RptHtml = CommPrintReport( '../rpt/Rpt01Action!PrintReportData.action', params, reportHeight, reportWidth);

                    // 4.通过模板映射到web页面的div
                    var TptTpl = new Ext.XTemplate(RptHtml); //模版,自定义组件
                    TptTpl.overwrite('id_rpt01_rpt'); //id_rpt01_rpt 是在页面中要插入的组件id号

// 打印报表:【src:action路径】【 params:参数】
// 【frameHeight:Iframe高度】【frameWidth:Iframe宽度】
function CommPrintReport(src, params, frameHeight, frameWidth) {
    var paramStr = src;
    if (null != params) {
        Ext.each(params, function(items, index) {
                    if (index > 0) {
                        paramStr += '&';
                    } else if (index == 0) {
                        paramStr += '?';
                    }
                    paramStr += items.key + '=' + items.value;
                });
    }
    var StrPrint = '<Iframe height = ' + frameHeight + ' width = ' + frameWidth
            + ' src="' + paramStr + '"></iframe>';

    return StrPrint;
};

  • java程序中这样写,结合数据库产生报表

    第一步

    通过jndi获得上下文对象,调用该对象的lookup()方法,获得数据源对象ds,通过数据源得到连接对象con,实例化HttpServletRequest,HttpServletResponse对象

第二步

通过文件路径(jasper)创建File对象,创建map对象,并将“SQLSTR”(这个是报表需要的参数对象,与值)参数添加进去,接着判断是否还有其他的参数,都添加

第三步

调用JasperRunManager对象的runReportToPdf()方法,得到buty字节数组,

通过调用response对象的setContentType设置内容类型。

第四步

通过ServletOutputStream 对象流将内容写出来

ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);// /写入对象输出流中
            outStream.flush();
            outStream.close();

response.setContentType("application/pdf");
            response.setContentLength(bytes.length);

JasperRunManager.runReportToPdf(
                    reportFile.getPath(), parameters, con);

// 初始化查找命名空间
        Context initContext = new InitialContext();
        // 找到DataSource
        DataSource ds = (DataSource) initContext
                .lookup("java:/comp/env/jdbc/oracleDb");
        try {
            con = ds.getConnection();
            HttpServletResponse response = ServletActionContext.getResponse();
            HttpServletRequest request = (HttpServletRequest) ActionContext
                    .getContext().get(
                            org.apache.struts2.StrutsStatics.HTTP_REQUEST);

            Map parameters = new HashMap();
            File reportFile = new File(request.getRealPath(reportPath));
            // SQL参数
            parameters.put(ParamName, SqlStr);

            // 其他参数
            if (null != varMaps && varMaps.size() > 0) {
                Set set = varMaps.entrySet();
                Iterator iterator = set.iterator();
                while (iterator.hasNext()) {
                    Map.Entry mapentry = (Map.Entry) iterator.next();
                    parameters.put((String) mapentry.getKey(),
                            (String) mapentry.getValue());
                }
            }
            byte[] bytes = JasperRunManager.runReportToPdf(
                    reportFile.getPath(), parameters, con);
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);// /写入对象输出流中
            outStream.flush();
            outStream.close();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (null != con) {
                try {
                    con.close();
                } catch (SQLException e) {
                    con = null;
                    e.printStackTrace();
                }
            }
        }

  • 打印报表

// 2.产生报表页面
                    var RptHtml = CommExportReport(
                            '../rpt/Rpt01Action!ExportReportData.action',
                            params);


// 报表导出:【src:action路径】【 params:参数】
function CommExportReport(src, params) {
    var paramStr = src;
    if (null != params) {
        Ext.each(params, function(items, index) {
                    if (index > 0) {
                        paramStr += '&';
                    } else if (index == 0) {
                        paramStr += '?';
                    }
                    paramStr += items.key + '=' + items.value;
                });
    }
    window.open(paramStr);
};

  • java程序中这样写,结合数据库产生报表

    第一步

    通过jndi获得上下文对象,调用该对象的lookup()方法,获得数据源对象ds,通过数据源得到连接对象con,实例化HttpServletRequest,HttpServletResponse对象

第二步

通过文件路径(jasper)创建File对象,创建map对象,并将“SQLSTR”(这个是报表需要的参数对象,与值)参数添加进去,接着判断是否还有其他的参数,都添加

第三步

判断通过jasper路径创建的文件是否存在,存在则

JRLoader调用loadObject()方法,参数是文件的路径 得到JasperReport对象

JasperFillManager调用fillReport()方法,参数是上面的JasperReport对象,参数对象map,连接对象,得到JasperPrint对象

response.setContentType("application/msword;charset=utf-8");//设置resonson对象内容类型

String fileName = new String("未命名.doc".getBytes("GBK"),
                        "ISO8859_1");

response.setHeader("Content-disposition",
                        "attachment; filename=" + fileName);

创建JRExporter 对象,调用setParameter(JRExporterParameter.JASPER_PRINT,
                        jasperPrint);

setParameter(JRExporterParameter.OUTPUT_STREAM,
                        response.getOutputStream()); 方法

最后调用exporter.exportReport();

第四步

Connection con = null;
        // 初始化查找命名空间
        Context initContext = new InitialContext();
        // 找到DataSource
        DataSource ds = (DataSource) initContext
                .lookup("java:/comp/env/jdbc/oracleDb");
        try {
            con = ds.getConnection();
            HttpServletResponse response = ServletActionContext.getResponse();
            HttpServletRequest request = (HttpServletRequest) ActionContext
                    .getContext().get(
                            org.apache.struts2.StrutsStatics.HTTP_REQUEST);

            Map parameters = new HashMap();
            File reportFile = new File(request.getRealPath(reportPath));
            // SQL参数
            parameters.put(ParamName, SqlStr);

            // 其他参数
            if (null != varMaps && varMaps.size() > 0) {
                Set set = varMaps.entrySet();
                Iterator iterator = set.iterator();
                while (iterator.hasNext()) {
                    Map.Entry mapentry = (Map.Entry) iterator.next();
                    parameters.put((String) mapentry.getKey(),
                            (String) mapentry.getValue());
                }
            }
            if (reportFile.exists()) {
                JasperReport jasperReport1 = (JasperReport) JRLoader
                        .loadObject(reportFile.getPath());
                JasperPrint jasperPrint = JasperFillManager.fillReport(
                        jasperReport1, parameters, con);
                response.setContentType("application/msword;charset=utf-8");
                String fileName = new String("未命名.doc".getBytes("GBK"),
                        "ISO8859_1");
                response.setHeader("Content-disposition",
                        "attachment; filename=" + fileName);
                JRExporter exporter = new JRRtfExporter();
                exporter.setParameter(JRExporterParameter.JASPER_PRINT,
                        jasperPrint);
                exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                        response.getOutputStream());
                exporter.exportReport();
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (null != con) {
                try {
                    con.close();
                } catch (SQLException e) {
                    con = null;
                    e.printStackTrace();
                }
            }
        }

  1. 有参数Ext.XTemplate

        var elcText = "{H_ELEC}kWh";  //H_ELEC是参数

       var elcTextTpl = new Ext.XTemplate(elcText);

        elcTextTpl.overwrite('firstVau1', {
                                        H_ELEC : H_ELEC  //H_ELEC是模版中的参数 
                                    });

 

在struts2.xml配置文件中是这样写的,其中package标签得继承struts-default,jasperreports-default包,返回结果的类型是jasper

<!--报表action-->
    <package name="default" namespace="/rpt" extends="struts-default,jasperreports-default">
        <action name="Rpt01Action" class="rpt.Rpt01Action">
            <result type="jasper"></result>
        </action>
        <action name="Rpt02Action" class="rpt.Rpt02Action">
            <result type="jasper"></result>
        </action>
    </package>

转载于:https://my.oschina.net/ldm95/blog/889391

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值