表达式是JasperReports的一个强大功能。它们可被用来声明那些执行多种计算的报表变量,用来在报表上数据分组,用来指定报表文本字段的内容或更进一步定制报表上对象的外观。
基本上所有的报表表达式都是通过特殊的语法可引用到报表参数,报表字段,报表变量和报表资源绑定的Java表达式。
在XML报表设计中有几个元素定义表达式:
<variableExpression>, <initialValueExpression>, <groupExpression>, <printWhenExpression>, <imageExpression>, <textFieldExpression> and others.
因为所有的JasperReports表达式是真正的Java表达式,你可以在它们中使用任何你想用的类。只要你使用其全类名(包括包)来引用它。当你编译你的报表并且你以数据填充它时,你也应确保你在报表表达式中使用的类是在classpath中的变量。
如果没有办法引用报表参数,报表字段或声明报表参数,报表表达式将没有什么用处。非常幸运,有一个特别的JasperReports语法充许你在创建XML报表设计时在表达式中引进这种的引用。
1.1.1.1. 引用参数(Parameter)
报表参数是通过使用$P{}字串来引用的,如下例:
<textFieldExpression> $P{ReportTitle} </textFieldExpression> |
这个样例假定我们在报表设计时申明了一个名为ReportTitle的报表参数,其类型为:java.lang.String。当报表被填充时,文本字段将显示此参数的值。
1.1.1.2. 引用字段(Field)
为了在表达式中使用报表字段引用,字段名必须放在$F{和 }字符串之间。例如,你想在报表上一个文本字段中显示两个数据源字段的连接值,你可定义如下的表达式:
<textFieldExpression> $F{FirstName} + " " + $F{LastName} </textFieldExpression> |
此表达式可以更复杂:
<textFieldExpression> $F{FirstName} + " " + $F{LastName} + " was hired on " + (new SimpleDateFormat("MM/dd/yyyy")).format($F{HireDate}) + "." </textFieldExpression> |
1.1.1.3. 引用变量(Variable)
要在表达式中引用报表变量,必须将变量名放在$V{ 和}字符串之间,如下例:
<textFieldExpression> "Total quantity : " + $V{QuantitySum} + " kg." </textFieldExpression> |
如你所见,通过特定的JasperReports语法引进的参数,字段和变量的引用是真正的Java对象。从报表设计上的参数,字段或变量声明材料上可知它们的类,我们将可在我们的表达式中调用这些对象引用上的方法。
此例将显示我们如何从一个java.lang.String报表字段中提取并显示第一个字符:
<textFieldExpression> $F{FirstName}.substring(0, 1) </textFieldExpression> |
1.1.1.4. 引用资源(Resource Bundle)
<jasperReport ...... resourceBundle="i18n"> … <textFieldExpression class="java.lang.String"> <![CDATA[$R{text.paragraph1}]]> </textFieldExpression> … </jasperReport> |