SpringMVC4.2.1+jasper+ireports5.6整合及部门问题解决方案

最近在学习整合Jasperreport到springMVC中,在网上找了很多大神的资料,终于能够正常运行了,把整合方案和遇到的问题整理如下:

1.软件

a) 下载iReport-5.6.0,只支持1.7-1.5版本的JDK,如果本机已经安装了1.7以上版本,请下载一个jdk1.7-1.5的版本,修改iReport-5.6.0\etc中的ireport.conf文档,将jdkhome的路径该为你下载的jdk安装路径

b) PDF中文显示问题:需要在需要中文展示的字段配置属性如下属性

c) net.sf.jasperreports.engine.JRException: Error retrieving field value from bean 异常解决方案:

i. 错误1检查你的JavaBean,在JavaBean中补充各属性需要的Set/Get方法(1必须有)

ii. 错误2:检查JavaBean中各字段是否与iReport报表中设计的一致(包括各字段对应的类型和总个数)。假设你的JavaBean中有user字段,表示“用户”,这里我们用字符串表示,在JavaBean中:private String user;iReport表格设计中,右键点击Fields”图标 —>“添加 Field(A)”,将新建的field1重命名为user”,点击“确定”即可,其他步骤省略...最终部分结果在XML中类型如下所示:

<field name="user" class="Java.lang.String"/>

... ...

<textFieldExpression><![CDATA[$F{user}]]></textFieldExpression>

... ...

iii. 错误:3删除<fieldDescription>,如果描述是空的

d) 图形重复问题:不能放在detail band中,放在其不重复的band中,如:summary band

e) Excel模式下多个jasper放在同一个Excel的方法,设置参数:

JRXlsExporter xls = new JRXlsExporter();
xls.setParameter(JRExporterParameter.JASPER_PRINT_LIST,list);//此处的list为JasperPrint的list集合 xls.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.TRUE);//设置为true,即可在一个excel中,每个单独的jasper对象放入到一个sheet页中
String[] sheetNames = {"自定义1","自定义2","自定义3"};
xls.setParameter(JRXlsExporterParameter.SHEET_NAMES, sheetNames);//此处这样写即可

2.Jar包配置

a) 配置包的maven如下

<dependency>

<groupId>net.sf.jasperreports</groupId>

<artifactId>jasperreports</artifactId>

<version>5.6.0</version>

</dependency>

<dependency>

<groupId>org.codehaus.groovy</groupId>

<artifactId>groovy-all</artifactId>

<version>2.2.2</version>

</dependency>

<dependency>

<groupId>com.lowagie</groupId>

<artifactId>itextasian</artifactId>

<version>1.0</version>

</dependency>

<dependency>

<groupId>com.lowagie</groupId>

   <artifactId>itextasian</artifactId>

<version>2.1.7.js2</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>4.2.1.RELEASE</version>

</dependency>

PS:其中itextasian-1.0.jar,itextasian-2.1.7.js2.jarmaven中没有,是自己上传的,jar包在iReport-5.6.0\ireport\modules\ext中有,直接上传到本地的maven服务器就可以

3.SpringMVC配置

a) 通用解析器代码 ApplicationIReportView.java

package com.farmer.view;

import java.util.Map;

 

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

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

 

/**

 * SpringMVC + IReport整合 视图处理扩展

 * @Author 许亮

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

 */

public class ApplicationIReportViewextends JasperReportsMultiFormatView {

public static final StringCSV = "csv";

public static final StringHTML = "html";

public static final StringPDF = "pdf";

public static final StringXLS = "xls";

public static final StringXLSX = "xlsx";

private JasperReportjasperReport;

public ApplicationIReportView() {

super();

}

 

protected JasperPrintfillReport(Map<String, Object> model) throws Exception {

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

setUrl(String.valueOf(model.get("url")));

this.jasperReport = loadReport();

}

return super.fillReport(model);

}

protected JasperReportgetReport() {

return this.jasperReport;

}

}

b) 视图配置 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.farmer.view.ApplicationIReportView">

<!-- <property name="url" value="/WEB-INF/jasper/report2.jasper"/> -->

<property name="reportDataKey" value="jrMainDataSource"/>

</bean>

</beans>

c) SpringMVC配置文件增加试图解析器,放在spring-mvc.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>classpath:jasper/jasper-defs.xml</beans:value>

</beans:property>

</beans:bean>

d) 增加数据源代码

package com.farmer.factory;

public class PictureBean {

private String id;

private int value;

private long time;

public String getId() {

return id;

}

public void setId(Stringid) {

this.id =id;

}

public int getValue() {

return value;

}

public void setValue(int value) {

this.value =value;

}

public long getTime() {

return time;

}

public void setTime(long time) {

this.time =time;

}

}

 

e) 增加报表工厂的代码

package com.farmer.factory;

 

import java.util.ArrayList;

import java.util.List;

 

import com.farmer.api.bean.SdjsSiteConfig;

 

import net.sf.jasperreports.engine.JRDataSource;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JasperReport;

Import net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider;

import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

 

public class SiteConditionFactory extends JRAbstractBeanDataSourceProvider{

 

 

public SiteConditionFactory() {

super(SdjsSiteConfig.class);

}

 

@Override

public JRDataSource create(JasperReport arg0) throws JRException {

List<PictureBean> list = new ArrayList<PictureBean>();

PictureBean bean = new PictureBean();

bean.setId("测试1号");

bean.setValue(5);

bean.setTime(10000);

list.add(bean);

PictureBean bean1 = new PictureBean();

bean1.setId("测试1号");

bean1.setValue(105);

bean1.setTime(20000);

list.add(bean1);

PictureBean bean2 = new PictureBean();

bean2.setId("测试2号");

bean2.setValue(27);

bean2.setTime(10000);

list.add(bean2);

PictureBean bean3 = new PictureBean();

bean3.setId("测试2号");

bean3.setValue(45);

bean3.setTime(20000);

list.add(bean3);

PictureBean bean4 = new PictureBean();

bean4.setId("测试3号");

bean4.setValue(51);

bean4.setTime(10000);

list.add(bean4);

return new JRBeanCollectionDataSource(list);

}

 

@Override

public void dispose(JRDataSource arg0) throws JRException {

}

}

 

f) Controller调用代码

package com.farmer.controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

 

import com.farmer.factory.SiteConditionFactory;

import com.farmer.view.ApplicationIReportView;

 

import net.sf.jasperreports.engine.JRException;

 

@Controller

@RequestMapping("/reports")

public class ReportsController {

    

/**

 * 返回iReport报表视图

 * @param model

 * @return

 * @throws JRException

 */

@RequestMapping(value = "/getsiteconfig", method = RequestMethod.GET)

public String report(Model model) throws JRException {

// 报表数据源

SiteConditionFactory factory = new SiteConditionFactory();

// 动态指定报表模板url

model.addAttribute("url", "/WEB-INF/classes/jasper/SdjsTest.jasper");

model.addAttribute("format", ApplicationIReportView.PDF); // 报表格式

model.addAttribute("jrMainDataSource", factory.create(null));

//model.addAttribute("REPORT_MAX_COUNT",2);

return "iReportView";

}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值