天天看点

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整合 及 图片显示问题

继续阅读