群辉ds112j可以用群联固态硬盘怎么样吗

JasperReports学习笔记 - 疯狂的菠菜 - ITeye技术网站
博客分类:
reference:
/javaworld/jw-09-2002/jw-0920-opensourceprofile.html
JasperReports是一个非常流行的开源报表工具
所有的报表工具都离不了三个步骤:第一个就是定义报表模板, 第二个就是给模板填充数据, 第三个就是将最终数据的报表输出。
JasperReports的模板文件是一个后缀名为jrxml的xml文件, 它包含这样几个主要元素:
&jasperReport& 根元素
&title&标题
&pageHeader&页头
&detail&具体内容
&pageFooter&页尾
&band&作为以上元素的子元素, 用来定义报表区域
除了jasperReport之外, 其他元素都不是必须的
下面是一个jrxml文件的定义,用来输出helloworld
&?xml version="1.0"?&
&!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"&
&jasperReport name="Simple_Report"&
&band height="20"&
&staticText&
&reportElement x="180" y="0" width="200" height="20"/&
&text&&![CDATA[Hello World!]]&&/text&
&/staticText&
&/jasperReport&
接下来就是将报表模板文件编译成二进制文件,然后就是给报表模板填充数据,最后是输出(比如输出为PDF文件),下面的代码完成这个工作:
public class JasperReportsIntro
public static void main(String[] args)
JasperReport jasperR
JasperPrint jasperP
jasperReport = pileReport("reports/jasperreports_demo.jrxml");
jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile( jasperPrint, "reports/simple_report.pdf");
catch (JRException e)
e.printStackTrace();
上面的代码是JasperReport的早期版本的写法,不过原理还是一样的。
我们再看一个比较复杂的例子, 它的title是在程序中通过参数传递进行来的, 然后通过JDBC访问数据库来取得要填充的数据:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"&
&jasperReport name="BasicReport" &
&parameter name="Title" class="java.lang.String"/&
&queryString&&![CDATA[select name, cost from product]]&&/queryString&
&field name="NAME" class="java.lang.String"/&
&field name="COST" class="java.lang.Double"/&
&band height="50"&
&textField&
&reportElement x="0" y="0" width="200" height="50" /&
&textFieldExpression class="java.lang.String"&$P{Title}&/textFieldExpression&
&/textField&
&pageHeader&
&/pageHeader&
&columnHeader&
&band height="20"&
&staticText&
&reportElement x="180" y="0" width="180" height="20"/&
&textElement&
&font isUnderline="true"/&
&/textElement&
&text&&![CDATA[NAME]]&&/text&
&/staticText&
&staticText&
&reportElement x="360" y="0" width="180" height="20"/&
&textElement&
&font isUnderline="true"/&
&/textElement&
&text&&![CDATA[COST]]&&/text&
&/staticText&
&/columnHeader&
&band height="20"&
&textField&
&reportElement x="180" y="0" width="180" height="20"/&
&textFieldExpression class="java.lang.String"&&![CDATA[$F{NAME}]]&&/textFieldExpression&
&/textField&
&textField pattern="0.00"&
&reportElement x="360" y="0" width="180" height="20"/&
&textFieldExpression class="java.lang.Double"&&![CDATA[$F{COST}]]&&/textFieldExpression&
&/textField&
&columnFooter&
&/columnFooter&
&pageFooter&
&band height="15"&
&staticText&
&reportElement x="0" y="0" width="40" height="15"/&
&textElement/&
&text&&![CDATA[Page:]]&&/text&
&/staticText&
&textField&
&reportElement x="40" y="0" width="100" height="15"/&
&textElement/&
&textFieldExpression class="java.lang.Integer"&&![CDATA[$V{PAGE_NUMBER}]]&&/textFieldExpression&
&/textField&
&/pageFooter&
&/summary&
&/jasperReport&
从上面的模板文件中可以看出, 报表中的parameter, field, variable将通过P${name}, F${name}, and V${name}来进行引用。
下面是对应的java代码:
// First, load JasperDesign from XML and compile it into JasperReport
JasperDesign jasperDesign = JasperManager.loadXmlDesign("BasicReport.xml");
JasperReport jasperReport = pileReport(jasperDesign);
// Second, create a map of parameters to pass to the report.
Map parameters = new HashMap();
parameters.put("ReportTitle", "Basic JasperReport");
parameters.put("MaxSalary", new Double(25000.00));
// Third, get a database connection
Connection conn = Database.getConnection();
// Fourth, create JasperPrint using fillReport() method
JasperPrint jasperPrint = JasperManager.fillReport(jasperReport,
parameters, conn);
// You can use JasperPrint to create PDF
JasperManager.printReportToPdfFile(jasperPrint, "BasicReport.pdf");
// Or to view report in the JasperViewer
JasperViewer.viewReport(jasperPrint);
这里我们有几个类需要了解一下:
JasperDesign:可以看成报表模板对应的对象模型, 我们定义的jrxml文件最终需要转换成该模型来使用, 对于模板对象来说, 它是静态的对象, 因此只需在初始化的时候创建一次,而不必在每次生成报表的时候生成。
JasperReport:经过编译的JasperDesign就是JasperReport
JasperPrint:给JasperReport填充数据和传递参数之后得到的就是JasperPrint对象, 他就是我们最终要生成的报表对象。
JasperManager:可以看成以上的对象的工厂类,它提供有相关的方法来创建以上的类实例
浏览 25048
相关知识库:
浏览: 1906677 次
来自: 杭州
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
能不能直接弄个demo
现在这么用(JDK7将实现该功能): 这个说法是错误的,JDK ...Foteb 的BLOG
用户名:Foteb
访问量:6567
注册日期:
阅读量:5863
阅读量:12276
阅读量:397956
阅读量:1088354
51CTO推荐博文
JasperReport的使用
一、JasperReport的使用原因
&&&&& iReport连接数据库固然能得到动态的报表,但是在网络高度发展的神龛,客户理需要的通过网页,经过一系列的查询,然后点击一个按纽或链接就可以得到含有其需要数据的报表,可以说,持有这样需求的报表用户是大多数的,,毕竟用iReport连接数据库做成的报表,一来操作对客户不透明,客户不可能写sql语句,创建报表文件,再花费很大心思调整报表的布局等,然后点击得到需要的报表,这是根本不可能的;另一方面,仅仅是通过iReport这个客户端软件来生成,访问报表,而不是网络。
二、JasperReport的使用原理:
&&&&& 使用流程上面已经介绍过了,首先需要的一个xml文件,编译得到.jasper文件,然后和数据源结合生成报表输出。这里xml文件自己写比较难,因此需要借iReport生成,不过后缀名为.jrxml,其实和.xml是一个意思,编译由JasperReport APsI中的.
第一步:编译
这一步,把.jrxml文件编译成.jasper文件。
pileReportToFile()方法,这个方法由三个重载版本,你可以查JasperReport的API文档看到,这里我们仅解释一下其中一个版本,
void compileReportToFile(String arg0,String arg1);
arg0指事先创建的.jrxml文件的全路径,包括文件名.
arg1指经过编译后生成的.jasper文件的文件名,当然你也可以写上路径,这样你就可以在固定路径上查看.jasper文件,不过这个文件放在哪儿无所谓,注意这个参数的String串必须以.jasper结束。
&&&& 尽管可以用iReport来编译,省略这一下, 直接访问的已生成的.jasper文件,不过,不推荐这样做,毕竟是iReport使用的JasperReport版本可能与我们在Java工程中包含的版本不一样,这样,直接使用iReport生成的.jasper文件可能会在下一步的runReport中出问题。但是,我们可以用iReport来调试.jrxml文件是否有错误,这倒是挺好的。
第二步:运行报表为某种格式
这一步按某种格式运行报表,生成输出字节流,不过这一步并未生成输出结果,只是生成输出结果的字节流,为下一步的的输出字节流做好了充分的准备。
这一步我们使用的函数为
byte[] JasperRunManager.runReportToPdf(String jrFile, HashMap,map,Listl list);
来生成PDF输出的字节流。
下面详细地解释这个函数各参数的意义及生成查询结果的原理。
&& jrFile即为第一步中生成的.jasper文件的文件名.
&& lsit存放的是需要重复显示的数据。
&& map存放的是只显示一次的数据。
这一步需要数据库查询结果,这样,JasperReport的API才能把动态数据库和.jrxml文件结合生成动态报表。
&&&& 通过JasperReport的API来生成动态报表,也是需要做数据库查询的,然后把结果以多种方式传给runReport方法,当然这就没有iReport数据库查询那样方便了,一输入sql语句即可生成相应的field变量,在这里,我们需要事先在iReport中定义需要重复显示的field,当然在传给其查询结果前,这些field都取值为null,当然也只会显示一次,然后在程序在访问数据库,把查询结果保存在某个list中,当然list存放的是对象的,这些对象的属性名必须与iReport中的field名字一致。这样,当把这个list传入runReport方法后,list中的对象的属性将根据名称与iReport中的field按名称建立起了对应关系。这里的field不是自动生成的,而是事先创建的,查询结果不是自动与field关联,而是把查询结果以某种形式(lsit,ResultSet,Connection等)传给runReport方法,然后按属性名称与field关联。
&&&&& 这样,把需要重复显示的查询结果就传给了runReport方法,那么如果想传入的查询结果只有一条怎么办?毕竟,这样的结果一般不放在detail中,而是放在其他的band中,这样按照上述方法根本是不可能实现的,JasperReport的API用map来存放查询结果只有一条记录的字段名。为了实现这个目的,我们事先建立parameter变量,比如我们建立了一个叫averAge的field,那么我们根据上面的查询结果得到的list,取age属性来算出平均年龄,假如叫average,然后通过map.put(&averAge&,average),这样把map传给runReport方法后,averAge这个parameter变量自然有有了值了。
最后我们用下列语句来生成PDF输出字节流:
byte[] bytes=JasperRunManager.runReportToPdf(rFile, map, new JRBeanCollectionDataSource(list));
上面只是讲述的一种典型的list+map的形式生成输出结果字节流,其实还有其他的形式,读者可以看看JasperRunManager的runReportToPdf()的其他重载版本。不过原理都差不多。另外,上面只是生成Pdf输出字节流,我们也可以生成HTML,CSV,XLS等多种输出字节流,这里就不多说了,读者好好看一下JasperRunManager的runReportToXXX()(XXX代表输出的格式如HTML,CSV,XLS等)之类的方法,慢慢实验一下就知道了。
SV,XLS等)之类的方法,慢慢实验一下就知道了。
第三步:打印输出结果
我们可以在Jsp或是Servlet中调用
byte[] bytes=JasperRunManager.runReportToPdf(rFile, map, new JRBeanCollectionDataSource(list));
OutputStream out = res.getOutputStream();//获得输出流,即HTTP的response输出流,再用
out.write(bytes);
out.flush();
就可以得到输出结果,浏览器弹出的打开或保存文件的对话框,提示我进行打开或者保存等.
了这篇文章
类别:┆阅读(0)┆评论(0)1559人阅读
ireport学习(11)
在实际的多级报表项目开发中遇到了这样的问题。
& 子报表要根据父报表传递过来的值构建sql语句的where条件,再次往数据库中查找数据。
&父报表sql:
&&&&&&& SELECT 'XX类' species_name, 'A' species_id&&&&&&& FROM dual&&&&& UNION&&&&& SELECT 'ZZ类' species_name, 'B' species_id FROM dual&&&&& UNION&&&&& SELECT 'YY类' species_name, 'C' species_id FROM dual
&一级子报表sql:
&&&&&&& select&&&&& ts.species_id,&&& from tb_supply_species ts,t_suppliers t&&& where ts.supply_id=t.id and t.status=1&&&&& and& ts.species_id like $P{speciesId}& GROUP BY& ts.species_id
父报表如何传递值给子报表见图:
& 这里父报表变量$V{speciesIdVar}的
在ireport报表中expression是通过java方法得到一个表达式的。
如此便完成了模糊查询。
&SELECT 'XX类' species_name, '%A%' species_id&&&&&&& FROM dual&&&&& UNION&&&&& SELECT 'ZZ类' species_name, '%B%' species_id FROM dual&&&&& UNION&&&&& SELECT 'YY类' species_name, '%C%' species_id FROM dual
&直接传$F{species_id}给子报表即可。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:126533次
积分:1929
积分:1929
排名:第17215名
原创:63篇
转载:25篇
评论:18条
(1)(3)(19)(12)(13)(3)(8)(9)(1)(1)(5)(13)现在位置:&>&
JasperReport 在Spring中的使用 有关问题
JasperReport 在Spring中的使用 问题
最近看了《JasperReports for Java Developers》,里面讲了怎么在Spring里使用JasperReport照着里面的例子做了一下,例子是没有问题的,但是我把展现方式改为由JasperReportsHtmlView 展现就出问题了,所有的图片都出不来,是不是使用JasperReportsHtmlView还要配置其它的拦截器或是什么?我在Google里找了一通,也没能解决主要是E文不太好国外的论坛也找了,看得头大,所以把代码贴出来,那位用过的能指点一下,谢过了web配置文件&?xml version="1.0" encoding="UTF-8"?&
&web-app id="WebApp_ID" version="2.4" xmlns="/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"&
&display-name&ReportWebApp&/display-name&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&servlet-name&jasperSpring&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet
&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&jasperSpring&/servlet-name&
&url-pattern&/jasperSpring/*&/url-pattern&
&/servlet-mapping&
&/web-app&前台Jsp页面:&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&Generate Report&/title&
Click on the button to generate the report.
&form name="reportForm" action="jasperSpring/report" method="get"&&input
type="submit" name="submitButton" value="Submit" /&&/form&
&/html&jasperSpring-servlet.xml的内容:&?xml version="1.0" encoding="UTF-8" ?&
&!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"&
&bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"&
&property name="driverClassName"&
&value&com.microsoft.jdbc.sqlserver.SQLServerDriver&/value&
&/property&
&property name="url"&
&value&jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind&/value&
&/property&
&property name="username"&
&value&sa&/value&
&/property&
&property name="password"&
&value&sa&/value&
&/property&
&bean id="publicUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&
&property name="mappings"&
&prop key="report"&jasperController&/prop&
&/property&
&bean id="jasperController"
class="net.aachina.jasperreport.JasperSpringController"&
&property name="dataSource"&
&ref local="dataSource" /&
&/property&
&bean id="viewResolver"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver"&
&property name="basename" value="views" /&
&bean id="ImageServlet" class="net.sf.jasperreports.j2ee.servlets.ImageServlet"&
&/beans&引用views.properties中的内容
report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
#report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsHtmlView
#report.class=net.aachina.jasperreport.render.JasperReportsHtmlView
report.url=reports/ChartReportDemo.jasper
控制器JasperSpringController的源码:
package net.aachina.
import java.io.IOE
import java.sql.C
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
import java.util.HashM
import java.util.M
import javax.servlet.ServletE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.sql.DataS
import net.sf.jasperreports.engine.JRResultSetDataS
import org.springframework.web.servlet.ModelAndV
import org.springframework.web.servlet.mvc.C
public class JasperSpringController implements Controller {
private DataSource dataS
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException
return new ModelAndView("report", getModel());
@SuppressWarnings("unchecked")
private Map getModel() throws ClassNotFoundException, SQLException
ResultSet resultS
HashMap model = new HashMap();
String query = "SELECT"+
" Employees.[LastName] AS Employees_LastName,"+
" Employees.[FirstName] AS Employees_FirstName,"+
" Employees.[EmployeeID] AS Employees_EmployeeID,"+
" Orders.[OrderID] AS Orders_OrderID,"+
" Orders.[OrderDate] AS Orders_OrderDate "+
" Employees INNER JOIN
Orders ON Employees.[EmployeeID] = Orders.[EmployeeID]";
connection = dataSource.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(query);
JRResultSetDataSource resultSetDataSource =new JRResultSetDataSource(resultSet);
model.put("datasource", resultSetDataSource);
public void setDataSource(DataSource dataSource)
this.dataSource = dataS
JasperReport页面在IReport中的效果:页面输出PDF效果:但把输出改为JasperReportsHtmlView页面上的所有图片都显示不出来,应该是还有什么属性值设置的不对,哪位知道的请指点一下,项目里面的Jar包太大了不然把整个项目都上传上来
hejianhuacn
直接使用Servlet 可以正确的输出为HTML,代码为:
package net.aachina.
import java.io.IOE
import java.io.InputS
import java.io.PrintW
import java.sql.C
import java.sql.DriverM
import java.util.HashM
import javax.servlet.ServletC
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import net.sf.jasperreports.engine.JRExporterP
import net.sf.jasperreports.engine.JasperFillM
import net.sf.jasperreports.engine.JasperP
import net.sf.jasperreports.engine.export.JRHtmlE
import net.sf.jasperreports.engine.export.JRHtmlExporterP
import net.sf.jasperreports.j2ee.servlets.ImageS
public class HtmlReportServlet extends HttpServlet {
public static final String REPORT_DIRECTORY = "/reports";
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletConfig().getServletContext();
String reportName = "ChartReportDemo";
PrintWriter printWriter = response.getWriter();
InputStream reportStream = getServletConfig().getServletContext()
.getResourceAsStream(
"/" + REPORT_DIRECTORY + "/" + reportName + ".jasper");
JasperPrint jasperP
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager
.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind","sa","sa");
jasperPrint = JasperFillManager.fillReport(reportStream,
new HashMap(), connection);
JRHtmlExporter htmlExporter = new JRHtmlExporter();
response.setContentType("text/html");
request.getSession().setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
htmlExporter.setParameter(JRExporterParameter.OUTPUT_WRITER,
printWriter);
htmlExporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "gb2312");
htmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"image?image=");
htmlExporter.exportReport();
connection.close();
System.out.println("done!");
} catch (Throwable t) {
// display stack trace in the browser
t.printStackTrace(printWriter);
web.xml修改为:&?xml version="1.0" encoding="UTF-8"?&
&web-app id="WebApp_ID" version="2.4" xmlns="/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"&
&display-name&
ReportWebApp&/display-name&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&servlet-name&jasperSpring&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-name&ImageServlet&/servlet-name&
&servlet-class&net.sf.jasperreports.j2ee.servlets.ImageServlet&/servlet-class&
&/servlet&
&servlet-name&HtmlReportServlet&/servlet-name&
&servlet-class&
net.aachina.jasperreport.HtmlReportServlet
&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&jasperSpring&/servlet-name&
&url-pattern&/jasperSpring/*&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&HtmlReportServlet&/servlet-name&
&url-pattern&/htmlReport&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&ImageServlet&/servlet-name&
&url-pattern&/image&/url-pattern&
&/servlet-mapping&
&/web-app&index.jsp的form action修改为:htmlReport输出效果:图片上传不知道怎么编辑^_^
hejianhuacn
终于解决了!方法来源于:http://forum.springframework.org/showthread.php?t=25030 其实自己也应该想到的BS一下自己。为了不让后来人受累,我把代码再Copy过来使帖子完整^_^
package net.aachina.jasperreport.
import java.io.ByteArrayOutputS
import java.util.M
import javax.servlet.ServletOutputS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.ui.jasperreports.JasperReportsU
import org.springframework.util.CollectionU
import org.springframework.web.servlet.view.jasperreports.AbstractJasperReportsSingleFormatV
import org.springframework.web.util.WebU
import net.sf.jasperreports.engine.JRE
import net.sf.jasperreports.engine.JRExporterP
import net.sf.jasperreports.engine.JasperP
import net.sf.jasperreports.engine.export.JRHtmlE
import net.sf.jasperreports.engine.export.JRHtmlExporterP
import net.sf.jasperreports.j2ee.servlets.ImageS
public class JasperReportsHtmlViewExtend extends
AbstractJasperReportsSingleFormatView {
private static final int OUTPUT_BYTE_ARRAY_INITIAL_SIZE = 4096;
public JasperReportsHtmlViewExtend() {
setContentType("text/ charset=UTF-8");
protected JRExporter createExporter() {
JRHtmlExporter jrHtmlExporter = new JRHtmlExporter();
jrHtmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"image?image=");
return jrHtmlE
protected boolean useWriter() {
protected void renderReport(JasperPrint populatedReport, Map model,
HttpServletResponse response) throws Exception {
// TODO 自动生成方法存根
if (model.containsKey("requestObject")) {
HttpServletRequest request = (HttpServletRequest) model
.get("requestObject");
request.getSession().setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
populatedReport);
// Prepare report for rendering.
JRExporter exporter = createExporter();
// Set exporter parameters - overriding with values from the Model.
Map mergedExporterParameters = mergeExporterParameters(model);
if (!CollectionUtils.isEmpty(mergedExporterParameters)) {
exporter.setParameters(mergedExporterParameters);
if (useWriter()) {
// We need to write text to the response Writer.
// Copy the encoding configured for the report into the response.
String contentType = getContentType();
String encoding = (String) exporter
.getParameter(JRExporterParameter.CHARACTER_ENCODING);
if (encoding != null) {
// Only apply encoding if content type is specified but does not
// contain charset clause already.
if (contentType != null
&& contentType.toLowerCase().indexOf(
WebUtils.CONTENT_TYPE_CHARSET_PREFIX) == -1) {
contentType = contentType
+ WebUtils.CONTENT_TYPE_CHARSET_PREFIX +
response.setContentType(contentType);
// Render report into HttpServletResponse's Writer.
JasperReportsUtils.render(exporter, populatedReport, response
.getWriter());
// We need to write binary output to the response OutputStream.
// Apply the content type as specified - we don't need an encoding
response.setContentType(getContentType());
// Render report into local OutputStream.
// IE workaround: write into byte array first.
ByteArrayOutputStream baos = new ByteArrayOutputStream(
OUTPUT_BYTE_ARRAY_INITIAL_SIZE);
JasperReportsUtils.render(exporter, populatedReport, baos);
// Write content length (determined via byte array).
response.setContentLength(baos.size());
// Flush byte array to servlet output stream.
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
看代码就应该能明白了,哎 为什么我就没想到这么写呢对了控制器里面也要修改一下:package net.aachina.
import java.io.IOE
import java.sql.C
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
import java.util.HashM
import java.util.M
import javax.servlet.ServletE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.sql.DataS
import net.sf.jasperreports.engine.JRResultSetDataS
import org.springframework.web.servlet.ModelAndV
import org.springframework.web.servlet.mvc.C
public class JasperSpringController implements Controller {
private DataSource dataS
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException
return new ModelAndView("report", getModel(request));
@SuppressWarnings("unchecked")
private Map getModel(HttpServletRequest request) throws ClassNotFoundException, SQLException
ResultSet resultS
HashMap model = new HashMap();
String query = "SELECT"+
" Employees.[LastName] AS Employees_LastName,"+
" Employees.[FirstName] AS Employees_FirstName,"+
" Employees.[EmployeeID] AS Employees_EmployeeID,"+
" Orders.[OrderID] AS Orders_OrderID,"+
" Orders.[OrderDate] AS Orders_OrderDate "+
" Employees INNER JOIN
Orders ON Employees.[EmployeeID] = Orders.[EmployeeID]";
connection = dataSource.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(query);
JRResultSetDataSource resultSetDataSource =new JRResultSetDataSource(resultSet);
model.put("datasource", resultSetDataSource);
model.put("requestObject",request);
System.out.println("well done!");
public void setDataSource(DataSource dataSource)
this.dataSource = dataS
hejianhuacn
在上面的Controller中传入的是JRResultSetDataSource 如何传入Connection?因为报表文件里已经存在SQL语句了,如何直接传入Connection呢?这样最少页面看上去要整齐一点
这样做,connection何时关闭?以下做法供参考:将datasource(jdbc)作为一个value放入model,这样spring的jasper相关view就会取到这个datasource,进而获取connection,fillreport后由spring关闭connection。请参考代码AbstractJasperReportsView.fillReport
JRDataSource jrDataSource = getReportData(model);
if (jrDataSource != null) {
// Use the JasperReports JRDataSource.
if (logger.isDebugEnabled()) {
logger.debug("Filling report with JRDataSource [" + jrDataSource + "].");
return JasperFillManager.fillReport(this.report, model, jrDataSource);
if (this.jdbcDataSource == null) {
this.jdbcDataSource = (DataSource) CollectionUtils.findValueOfType(model.values(), DataSource.class);
if (this.jdbcDataSource != null) {
// Use the JDBC DataSource.
if (logger.isDebugEnabled()) {
logger.debug("Filling report with JDBC DataSource [" + this.jdbcDataSource + "].");
Connection con = this.jdbcDataSource.getConnection();
return JasperFillManager.fillReport(this.report, model, con);
con.close();
catch (SQLException ex) {
logger.debug("Could not close JDBC Connection", ex);
// Assume that the model contains parameters that identify
// the source for report data (e.g. Hibernate or JPA queries).
return JasperFillManager.fillReport(this.report, model);
没有上传这个文件吗???ChartReportDemo.jasper
相关文章:
&& 最新文章
&& 热门文章
&& 他们在看
/ 【辽】ICP备号-6 /
版权所有 Copyright &}

我要回帖

更多关于 120g固态硬盘够用吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信