在本教程中,我們将學習如何在一個簡單的spring mvc web應用中內建jasper報表工具。教程涵蓋的技術點有:報表自定義資料源的使用;報表渲染、呈現的配置與實作;ireport報表設計器的使用(報表模闆設計)等。
代碼下載下傳
以下兩種方式任選其一:
1. 在已有的springmvc項目環境中進行配置(要求項目可正常運作、調試);
2. 在eclipse中安裝spring的sts工具,然後建立一個spring mvc project(要求已配置好maven環境);
添加必須的jasperreports包依賴:
<!-- 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。
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,并指定解析器類為自定義的視圖解析器類:
<?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中增加下述配置:
<!-- 注冊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實體類:
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目錄下:
3、編寫controller方法
* 傳回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