天天看點

jasperReports 與spring mvc整合 及 圖檔顯示問題

在本教程中,我們将學習如何在一個簡單的spring mvc web應用中內建jasper報表工具。教程涵蓋的技術點有:報表自定義資料源的使用;報表渲染、呈現的配置與實作;ireport報表設計器的使用(報表模闆設計)等。

代碼下載下傳

以下兩種方式任選其一:

1. 在已有的springmvc項目環境中進行配置(要求項目可正常運作、調試);

2. 在eclipse中安裝spring的sts工具,然後建立一個spring mvc project(要求已配置好maven環境);

jasperReports 與spring mvc整合 及 圖檔顯示問題
jasperReports 與spring mvc整合 及 圖檔顯示問題

添加必須的jasperreports包依賴:

jasperReports 與spring mvc整合 及 圖檔顯示問題

<!-- ireport jasperreports -->  

<dependency>  

    <groupid>net.sf.jasperreports</groupid>  

    <artifactid>jasperreports</artifactid>  

    <version>5.6.0</version>  

</dependency>  

    <groupid>org.codehaus.groovy</groupid>  

    <artifactid>groovy-all</artifactid>  

    <version>2.2.2</version>  

1、繼承jasperreportsmultiformatview類,并重寫fillreport()方法,在該方法中增加seturl()實作,這樣就可以在controller中指定要使用的報表模闆檔案了。這樣做的好處是,隻需要一個jasperreport配置檔案,可以在controller中動态的設定報表模闆url。

jasperReports 與spring mvc整合 及 圖檔顯示問題

package com.pes_soft.example;  

import java.util.map;  

import net.sf.jasperreports.engine.jasperprint;  

import net.sf.jasperreports.engine.jasperreport;  

import org.springframework.web.servlet.view.jasperreports.jasperreportsmultiformatview;  

/** 

 * springmvc + ireport整合 視圖處理擴充 

 * @author 許亮 

 * @create 2015-11-7 21:38:18 

 */  

public class applicationireportview extends jasperreportsmultiformatview {  

    private jasperreport jasperreport;  

    public applicationireportview() {  

        super();  

    }  

    protected jasperprint fillreport(map<string, object> model) throws exception {  

        if (model.containskey("url")) {  

            seturl(string.valueof(model.get("url")));  

            this.jasperreport = loadreport();  

        }  

        return super.fillreport(model);  

    protected jasperreport getreport() {  

        return this.jasperreport;  

}  

2、在/web-inf/jasper/目錄下建立報表視圖配置檔案jasper-defs.xml,并指定解析器類為自定義的視圖解析器類:

jasperReports 與spring mvc整合 及 圖檔顯示問題

<?xml version="1.0" encoding="utf-8"?>  

<beans xmlns="http://www.springframework.org/schema/beans"  

    xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"    

    xsi:schemalocation="  

        http://www.springframework.org/schema/beans   

        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  

    <bean id="ireportview" class="com.pes_soft.example.applicationireportview">  

        <!-- <property name="url" value="/web-inf/jasper/report2.jasper"/> -->  

        <property name="reportdatakey" value="jrmaindatasource"/>  

    </bean>  

</beans>  

3、jasper報表的渲染需要用到xmlviewresolver視圖解析器,這樣你的項目中就會存在多個視圖解析器。需要注意的是,項目中如果使用了多個視圖解析器,則需要設定order的值來區分解析器的使用順序,order值越小則越靠前。增加xmlviewresolver視圖解析器的同時,并指定其要解析的配置檔案路徑。

那麼,需要在/web-inf/spring/appservlet/servlet-context.xml中增加下述配置:

jasperReports 與spring mvc整合 及 圖檔顯示問題

<!-- 注冊xmlviewresolver,用于ireport & jasperreports報表生成 -->  

<beans:bean id="jasperreportresolver" class="org.springframework.web.servlet.view.xmlviewresolver">  

    <beans:property name="order">  

        <beans:value>0</beans:value>  

    </beans:property>  

    <beans:property name="location">  

        <beans:value>web-inf/jasper/jasper-defs.xml</beans:value>  

</beans:bean>  

1、建立javabeanperson實體類:

jasperReports 與spring mvc整合 及 圖檔顯示問題

package com.pes_soft.example.model;  

import java.util.arraylist;  

import java.util.list;  

 * ireport測試bean: person實體類 

 * @create 2015-1-15 20:32:27 

public class javabeanperson {  

    private string name;    // 姓名  

    private string sex;        // 性别  

    private int age;        // 年齡  

    private string hometown;// 籍貫  

    private string phone;    // 電話号碼  

    public javabeanperson() {}  

    public javabeanperson(string name, string sex, int age, string hometown, string phone) {  

        this.name = name;  

        this.sex = sex;  

        this.age = age;  

        this.hometown = hometown;  

        this.phone = phone;  

    // 此處省略字段的getter和setter  

    public static list<javabeanperson> getlist() {  

        list<javabeanperson> list = new arraylist<javabeanperson>();  

        list.add(new javabeanperson("lily", "female", 22, "hubei", "10086"));  

        list.add(new javabeanperson("macro", "male", 33, "beijing", "13800000000"));  

        list.add(new javabeanperson("andy", "male", 44, "hongkong", "13812345678"));  

        list.add(new javabeanperson("linder", "female", 28, "guangxi", "18677778888"));  

        list.add(new javabeanperson("jessie", "female", 26, "gansu", "18219177720"));  

        return list;  

2、使用ireport設計報表模闆,并編成.jasper二進制檔案,并拷貝至\web-inf\jasper目錄下:

jasperReports 與spring mvc整合 及 圖檔顯示問題

3、編寫controller方法

jasperReports 與spring mvc整合 及 圖檔顯示問題

 * 傳回ireport報表視圖 

 * @param model 

 * @return 

@requestmapping(value = "/report", method = requestmethod.get)  

public string report(model model) {  

    // 報表資料源  

    jrdatasource jrdatasource = new jrbeancollectiondatasource(javabeanperson.getlist());  

    // 動态指定報表模闆url  

    model.addattribute("url", "/web-inf/jasper/mvcireportexample.jasper");  

    model.addattribute("format", "pdf"); // 報表格式  

    model.addattribute("jrmaindatasource", jrdatasource);  

    return "ireportview"; // 對應jasper-defs.xml中的bean id  

jasperReports 與spring mvc整合 及 圖檔顯示問題

繼續閱讀