<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 閱讀(3113) 評論(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
    主站蜘蛛池模板: 你好老叔电影观看免费| 亚洲视频一区网站| 亚洲人AV永久一区二区三区久久| 四虎影视www四虎免费| 国产成人免费高清激情视频| 亚洲精品动漫免费二区| 国产一精品一AV一免费孕妇| 免费可以在线看A∨网站| 99精品全国免费观看视频| 欧洲精品成人免费视频在线观看 | 亚洲日本人成中文字幕| 亚洲伊人久久大香线蕉| 亚洲天堂福利视频| 久久亚洲精品专区蓝色区| 国产亚洲精品VA片在线播放| 中文字幕无码精品亚洲资源网久久| 亚洲AV无码一区二区三区在线| 精品亚洲AV无码一区二区| 亚洲国产精品一区二区三区在线观看 | 国产精品黄页免费高清在线观看 | 亚洲精品成人网站在线播放| 亚洲精品无码久久毛片波多野吉衣| 亚洲一级免费毛片| 亚洲欧好州第一的日产suv| 亚洲av无码成人精品区一本二本 | 久久久婷婷五月亚洲97号色| 亚洲国产精品综合久久网各| 亚洲中文字幕精品久久| 国产亚洲蜜芽精品久久| 国产精品无码免费专区午夜| 日本在线免费播放| 18禁网站免费无遮挡无码中文| 成人免费在线观看网站| 免费在线观看日韩| 亚洲αv在线精品糸列| 亚洲第一页在线视频| 亚洲国产午夜精品理论片在线播放| 香蕉97碰碰视频免费| 久久永久免费人妻精品| 在人线av无码免费高潮喷水| 四虎免费久久影院|