<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    JasperReport與hibernate結合使用

    Posted on 2007-02-06 12:31 dennis 閱讀(3116) 評論(1)  編輯  收藏 所屬分類: java
    花了兩天時間,終于把jasperreport與項目中使用的hibernate結合使用.最新版本的ireport支持HQL查詢,可以在 ireport里面寫HQL語句查詢并設計好報表.需要注意的是把hibernate.cfg.xml包括進classpath!!(菜單options ->classpath進行設置)給張圖:

    test2.jpg

    設計好報表之后編譯成jasper文件,在servlet中調用,我們需要實現自己的hibernate datasource:

    public class HibernateQueryResultDataSource implements JRDataSource {

    ?private String[] fields;

    ?private Iterator iterator;

    ?private Object currentValue;

    ?public HibernateQueryResultDataSource(List list, String[] fields) {
    ??this.fields = fields;
    ??this.iterator = list.iterator();
    ?}

    ?public Object getFieldValue(JRField field) throws JRException {
    ??Object value = null;
    ??int index = getFieldIndex(field.getName());
    ??if (index > -1) {
    ???Object[] values = (Object[]) currentValue;
    ???value = values[index];
    ??}
    ??return value;
    ?}

    ?public boolean next() throws JRException {
    ??currentValue = iterator.hasNext() ? iterator.next() : null;
    ??return (currentValue != null);
    ?}

    ?private int getFieldIndex(String field) {
    ??int index = -1;
    ??for (int i = 0; i < fields.length; i++) {
    ???if (fields[i].equals(field)) {
    ????index = i;
    ????break;
    ???}
    ??}
    ??return index;
    ?}

    }

    此類構造函數需要兩個參數,查詢結果的list以及查詢的所有屬性名(這些屬性名必須和報表界面的field名一致)

    ,使用方式如下:

    1.導出pdf:

    File reportFile = new File(getServletContext().getRealPath(
    ????"/reports/" + queryResult.getReportFileName() + ".jasper"));

    ??HibernateQueryResultDataSource dataSource = new HibernateQueryResultDataSource(
    ????queryResult.getList(parameters), queryResult.getFields());
    ??if (reportType.equals("pdf") || reportType.equals("")) {
    ???try {
    ????byte[] bytes = JasperRunManager.runReportToPdf(reportFile
    ??????.getPath(), null, dataSource);
    ????response.setContentType("application/pdf");
    ????response.setContentLength(bytes.length);
    ????ServletOutputStream ouputStream = response.getOutputStream();
    ????ouputStream.write(bytes, 0, bytes.length);
    ????ouputStream.flush();
    ????ouputStream.close();

    ???} catch (Exception e) {
    ????e.printStackTrace();
    ???}
    ??}

    2.導出excel,需要把poi-2.0-final-20040126.jar放進web的lib里:

    try {

    ????JasperPrint print = JasperFillManager.fillReport(
    ??????new FileInputStream(reportFile), null, dataSource);
    ????// JRXlsExporter t=null;
    ????JRXlsExporter jRXlsExporter = new JRXlsExporter();
    ????ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
    ????jRXlsExporter.setParameter(JRExporterParameter.JASPER_PRINT,
    ??????print);
    ????jRXlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
    ??????xlsReport);
    ????jRXlsExporter
    ??????.setParameter(
    ????????JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
    ????????Boolean.TRUE);
    ????jRXlsExporter.setParameter(
    ??????JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
    ??????Boolean.TRUE);
    ????// jRXlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,ReportsConstants.bankDetailsHtml);

    ????// jRXlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
    ????// Boolean.TRUE);

    ????jRXlsExporter.exportReport();
    ????byte[] bytes = xlsReport.toByteArray();

    ???
    ????response.setContentType("application/vnd.ms-excel");
    ????response.setContentLength(bytes.length);
    ????xlsReport.close();
    ????OutputStream ouputStream = response.getOutputStream();
    ????ouputStream.write(bytes, 0, bytes.length);
    ????ouputStream.flush();
    ????ouputStream.close();

    ???} catch (Exception e) {
    ????e.printStackTrace();
    ???}


    評論

    # re: JasperReport與hibernate結合使用  回復  更多評論   

    2008-05-26 09:41 by wanglijun
    我不知道那里配置問題的文件,在iReport使終找不到Hibarnate的映射文件。能不能給我一點資料。我的E-mail是:czwangli88@126.com。Thank you
    主站蜘蛛池模板: 国产精品爱啪在线线免费观看| 99ee6热久久免费精品6| 亚洲最新在线视频| 亚洲色婷婷六月亚洲婷婷6月| 亚洲日本在线看片| 在线成人精品国产区免费| 亚洲乱码国产一区三区| 97在线视频免费公开视频| 91频在线观看免费大全| 亚洲国产夜色在线观看| 美女网站免费福利视频| 久久精品国产亚洲αv忘忧草 | 色老头永久免费网站| 亚洲精品无码激情AV| ssswww日本免费网站片| 欧亚精品一区三区免费| 国产亚洲精品美女久久久| 99在线视频免费观看| 亚洲国产成人片在线观看| 人人狠狠综合久久亚洲| 又粗又大又硬又爽的免费视频| 午夜亚洲www湿好大| 日韩精品无码永久免费网站| 可以免费观看一级毛片黄a| 一个人免费观看www视频| 永久免费AV无码网站在线观看 | 久久精品夜色噜噜亚洲A∨| 成人免费乱码大片A毛片| 亚洲天天做日日做天天看| 国产卡一卡二卡三免费入口| 亚洲乱色伦图片区小说| 亚洲中文字幕伊人久久无码| 亚洲狠狠婷婷综合久久蜜芽| 亚洲国产精品一区二区三区久久| 香蕉免费在线视频| 亚洲国产精品xo在线观看| 国产成人无码免费视频97| 久草免费福利视频| 亚洲AV日韩AV天堂久久| 成年18网站免费视频网站| 好男人资源在线WWW免费|