<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无码专区在线播放 | 国产AV旡码专区亚洲AV苍井空| a视频在线观看免费| 亚洲中文字幕成人在线| 免费无码国产V片在线观看| 日韩亚洲国产二区| 天堂亚洲免费视频| 亚洲一级毛片免观看| 很黄很黄的网站免费的| 亚洲AV无码久久久久网站蜜桃 | 国产免费黄色无码视频| 亚洲午夜国产片在线观看| 中文字幕不卡高清免费| 久久精品国产亚洲AV麻豆~| 免费女人高潮流视频在线观看| 亚洲影院在线观看| 国产精品久久久久免费a∨| 亚洲精品无码av片| 亚洲va中文字幕无码| 久久久久久久久久久免费精品| 亚洲欧洲无码AV电影在线观看 | 亚洲精品欧美综合四区| 免费jlzzjlzz在线播放视频| 一级**爱片免费视频| 亚洲av永久无码精品国产精品| 18级成人毛片免费观看| 亚洲精品又粗又大又爽A片| 亚洲成a人片在线观看国产| 免费毛片a线观看| 亚洲欧洲无卡二区视頻| 亚洲午夜日韩高清一区| 91青青国产在线观看免费| 亚洲av无码专区青青草原| 国产午夜亚洲不卡| 又粗又大又黑又长的免费视频| 99亚洲精品卡2卡三卡4卡2卡| 精品久久香蕉国产线看观看亚洲| 120秒男女动态视频免费| 美女被免费网站视频在线| 亚洲VA成无码人在线观看天堂| 四虎影院在线免费播放|