var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20738293-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script')"/>
jutleo
欢迎走进有风的地方~~
posts - 63,  comments - 279,  trackbacks - 0
JasperReport有三个域用来存放、展示数据,Parameter、Field、Variables,这次说说这三个吧!

Report Parameters

JasperReport 报表的参数是最为一个object类型的参数传递的,通常我们在jrxml文件中会这样定义
<parameter name="ReportTitle" class="java.lang.String"/>
顾名思义,参数是用来传递给报表的,通常我们会动态的传递一个参数给报表作为报表的标题,传递给自报表一个参数用来作为自报表查询的条件等等。
jasperReport内置了几个有用的参数:REPORT_SCRIPTLET引用外部的scriptlet,REPORT_LOCALE引用国际化preperty文件使用的,REPORT_CONNECTION传递报表JDBC连接参数使用的等等。
public Map getMap() {

        Map map 
= new HashMap();
        map.put(
"reportTitle""laoshulin");
        
return map;
    }
程序运行的时候就会动态的赋值给ReportTitle这个参数
下面这个是报表运行时需要的connection参数,是动态传递给子报表的
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
我们在程序运行的时候的时候可以把一个打开的连接传给REPORT_CONNECTION参数,
parameters.put("REPORT_CONNECTION", getConnection());

Report Field

field是用来展现数据的域,也是最常用的一个,采用JDBC时iReport可以在我们写入SQL时自动检测到所有的field,有时我们需要自己手动建立一些field,这个字段没有什么好说的,我们可以在iReport设置它的各种属性。以后碰到的时候在说。

Report Variables

提起Variables不能不提expression,report expression是jasperReport一个非常实用的组件,它可以用来执行各种计算,修饰各个字段的数据。如:
<textFieldExpression>
    $F{FirstName} + " " + $F{LastName}
</textFieldExpression>

<textFieldExpression>
    "Max Order ID is : " + $P{MaxOrderID}
</textFieldExpression>

        报表变量是建立在表达式上的一个特殊的用来简化报表设计,一个变量可以执行内置类型的计算以及相应表达式,如:总数,总和、平均数、最低值、最高值、差额等等。
<variable name="QuantitySum" 
        class
="java.lang.Double" calculation="Sum">
    
<variableExpression>$F{Quantity}</variableExpression>
</variable>
JasperReport内置了一些变量   

PAGE_NUMBER 页数
COLUMN_NUMBER 列数
REPORT_COUNT 报表总数
PAGE_COUNT  当前页数
COLUMN_COUNT 列总数

值得一提的是JasperReport还有一个比较强大的功能就是parameter/field/variables都支持html语言

设置Markup为HTML时就可以在Text Field Expression 中写入html标记了
"<font color='blue' size='5'>"+$P{reportTitle}+"</font>"
当报表预览的时候就可以直接看到html的效果了
posted on 2008-12-11 11:47 凌晨风 阅读(4595) 评论(23)  编辑  收藏 所属分类: iReport + JasperReport 系列

FeedBack:
# re: iReport+jasperReport概念的澄清(续)
2008-12-11 21:01 | 杨爱友
我转载你的文章了啊,把你有关ireport+jasper的都转了。
再问一下,你感觉好用不,他比起平常的打印有哪些优势?  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2008-12-12 08:31 | 凌晨风
java都提倡开源,jasperReport个人觉得功能非常强大,特别是它支持scriptlet,根据API我们可以定制自己的报表,只能说目前它是最适合的一个!  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-09 16:36 | xiefan
请问怎么能得到报表里面的参数名字跟类型呢?我苦恼很久了,大虾能不能帮我一下?  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-09 16:53 | 凌晨风
@xiefan
哈哈 你要是继续往下看你就会知道怎么做了  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-09 17:33 | xiefan
大虾能不能贴点代码供小弟参考一下,谢谢啦~O(∩_∩)O哈哈~  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-09 17:54 | 凌晨风
@xiefan
JRParameter jrParameters[] = jasperReport.getParameters();
拿出所有的参数,然后遍历jrParameters数组,
JRParameter jrParameter = jrParameters[i];
String name = jrParameter.getName();
取出每一个参数的名字
getValueClassName()
取出参数的类型
建议你往下看看,多看看jasperAPI
  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-09 18:07 | xiefan
谢谢指点,多多向你学习,day day up!  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 10:26 | xiefan
大虾请教你一下!如果创建一个Web工程,在一个类里面把编译jrxml的代码写进去,就编译不了.jasper的文件了,是为什么呢?是路径的原因吗?我看网上的例子都是用的jsp或者servlet写的,能不能在Web工程里面单独写一个类来完成编译,打印报表的这些功能呢?  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 13:16 | 凌晨风
@xiefan
完全可以啊,建议使用jasper文件操作,在你的工程里编译是很耗费性能的  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 14:31 | xiefan
刚开始我是用Java工程做的,没有问题,没试Web工程,现在我用Web再用原来的方式就不行了,老是编译不了jasper文件,报空指针异常,大虾给我点代码参考吧,我快崩溃了,客户明天就要项目了,急啊~~~~~  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 15:36 | xiefan
请大虾留个MSN或QQ吧,向你请教一些问题!  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 16:37 | 凌晨风
空指针应该不是报表这边出现问题吧!,你多检查代码吧!或者贴上来看看  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 16:41 | xiefan
JasperCompileManager.compileReportToFile("c:\\Reports\\Sample_Report.jrxml", "Sample_Report.jasper");
Map map = new HashMap();
map.put("Login", "mpotvin");
JasperFillManager.fillReportToFile("Sample_Report.jasper", map, this.getConnection());  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 17:42 | 凌晨风
你搞错了吧!fillReportToFile这种情况下第一个参数使用jasperReport对象  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 17:46 | 凌晨风
JasperCompileManager.compileReportToFile编译后这个会产生Sample_Report.jasper文件,但是你有没有发现在你的硬盘上存在jasper文件呢?不建议这样使用!jrxml文件完全可以通过iReport编译成jasper文件,为什么你还有使用compileReportToFile方法呢?  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-03-11 20:11 | xiefan
这是客户的要求啊,他只提供一个.jrxml的文件,我现在执行JasperCompileManager.compileReportToFile(context.getRealPath("/reports/report.jrxml"));这句的时候,就报一个java.lang.NullPointerException
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Unknown Source)
net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:72)
net.sf.jasperreports.engine.util.JRSingletonCache.createInstance(JRSingletonCache.java:88)
net.sf.jasperreports.engine.util.JRSingletonCache.getCachedInstance(JRSingletonCache.java:78)
net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createParser(JRXmlDigesterFactory.java:1136)
net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createDigester(JRXmlDigesterFactory.java:1113)
net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:203)
net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168)
net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:89)
servlets.CompileServlet.service(CompileServlet.java:43)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
这样的错误,为什么呢?
  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-08 15:50 | zhangb310
偶也遇到了这种情况:
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromLocation(path);//这报空指针.
高手请教...  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-08 20:37 | 凌晨风
@zhangb310
jasperReport中请使用全路径名  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-08 21:06 | sunnidy
路径的问题 应该不是jasperReport的问题 我做DROOLS的时候也出现过这样的问题!  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-09 16:04 | zhangb310
我搞了两天了,还没好...郁闷
大虾帮帮忙了, 这个项目的里jasper文件以前是别人写的,可以用.
但是我写地就报空指针.(在ireport工具中生成报表是好的.在servlet中就报错了)
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromLocation(path);//还是这报空指针..  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-09 16:05 | zhangb310
也不是路径的问题.
我把path打印了是全路径.
大虾们,救命了!!!!!!!  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-09 16:32 | zhangb310
大虾们,你们有msn没?
我加你,更方便交流.
速度了 ....  回复  更多评论
  
# re: iReport+jasperReport概念的澄清(续)
2009-04-09 18:55 | 凌晨风
@zhangb310
laoshulin@gmail.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(11)

我参与的团队

随笔分类

随笔档案

文章分类

文章档案

新闻分类

新闻档案

收藏夹

围脖

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜