Struts2中带参数的报表

本文介绍如何在Struts2框架中使用JasperReports设计带参数的报表。通过定义参数并在报表设计文件中使用这些参数,可以实现动态填充报表内容。文中还提供了具体的报表设计文件代码及填充报表的Java程序示例。
摘要由CSDN通过智能技术生成

       最近一直在学习struts2,刚做了一个关于使用带参数的报表的例子,参考书籍是李刚老师的《struts2权威指南》。现将我的这个例子整理出来,如下所示:

      struts2 中制作带参数的报表,需要使用JasperReports。JasperReports允许在设计报表时使用一个或多个参数,这些参数在填充报表时通过一个Map对象传入。
为了在设计报表时定义参数,应该在报表设计文件中使用 <parameter .../>元素,每个<parameter .../>元素定义一个参数,定义参数所用的格式如下:
<!-- 定义一个名为book3的参数,该参数的类型是字符串 -->
<parameter name="book3" isForPrompting="false" class="java.lang.String"/>
定义了该参数后,就可以在指定报表设计文件的任意地方输出该参数,输出参数使用如下语法格式:
<!-- 在报表中输出参数内容 -->
$P{book1}
提示:大部分时候,我们都很少会直接通过编辑XML文件来定义报表设计文件,更多都是通过iReport来开发报表设计文件。
下面是本应用中所使用的报表设计文件代码:
<?xml version="1.0" encoding="GBK"  ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
   name="simpleVariable"
   columnCount="1"
   printOrder="Vertical"
   orientation="Portrait"
   pageWidth="595"
   pageHeight="842"
   columnWidth="535"
   columnSpacing="0"
                 leftMargin="30"
   rightMargin="30"
   topMargin="20"
   bottomMargin="20"
   whenNoDataType="NoPages"
   isTitleNewPage="false"
   isSummaryNewPage="false">
 <property name="ireport.scriptlethandling" value="0" />
 <property name="ireport.encoding" value="GBK" />
 <import value="java.util.*" />
 <import value="net.sf.jasperreports.engine.*" />
 <import value="net.sf.jasperreports.engine.data.*" />
 <!-- 定义一个Style对象,可用于重复定义多个文本内容的格式 -->
 <style
  name="zh"
  isDefault="false"
  fontName="隶书"
  fontSize="18"
  pdfFontName="STSong-Light"
  pdfEncoding="UniGB-UCS2-H"
 />
 <!-- 定义四个参数,每个参数都是字符串类型。 -->
 <parameter name="author" isForPrompting="true" class="java.lang.String"/>
 <parameter name="book1" isForPrompting="false" class="java.lang.String"/>
 <parameter name="book2" isForPrompting="false" class="java.lang.String"/>
 <parameter name="book3" isForPrompting="false" class="java.lang.String"/>
  <background>
   <band height="0"  isSplitAllowed="true" >
   </band>
  </background>
  <title>
   <band height="50"  isSplitAllowed="true" >
   </band>
  </title>
  <pageHeader>
   <band height="50"  isSplitAllowed="true" >
   </band>
  </pageHeader>
  <columnHeader>
   <band height="39"  isSplitAllowed="true" >
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <!-- 使用对该文本内容使用名为zh的Style -->
     <reportElement
      style="zh"
      x="203"
      y="8"
      width="131"
      height="27"
      key="textField"/>
<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement>
      <font/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$P{author}]]></textFieldExpression>
    </textField>
    <!-- 使用对该文本内容使用名为zh的Style -->
    <staticText>
     <reportElement
      style="zh"
      x="137"
      y="8"
      width="56"
      height="27"
      key="staticText-1"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement>
      <font/>
     </textElement>
    <text><![CDATA[作者:]]></text>
    </staticText>
   </band>
  </columnHeader>
  <detail>
   <band height="173"  isSplitAllowed="true" >
    <rectangle radius="5" >
     <reportElement
      x="128"
      y="8"
      width="255"
      height="103"
      forecolor="#FFFFFF"
      backcolor="#99FFFF"
      key="rectangle-1"/>
     <graphicElement stretchType="NoStretch"/>
    </rectangle>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      style="zh"
      mode="Opaque"
      x="137"
      y="14"
      width="241"
      height="28"
backcolor="#FFFFFF"
      key="textField"/>
     <box topBorder="None" topBorderColor="#FF9900" leftBorder="None" leftBorderColor="#990099" leftPadding="20" rightBorder="None" rightBorderColor="#FF0000" bottomBorder="None" bottomBorderColor="#99FFFF"/>
     <textElement>
      <font/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$P{book1}]]></textFieldExpression>
    </textField>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      style="zh"
      x="137"
      y="42"
      width="241"
      height="28"
      key="textField"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement>
      <font/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$P{book2}]]></textFieldExpression>
    </textField>
    <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
     <reportElement
      style="zh"
      x="137"
      y="70"
      width="241"
      height="28"
      key="textField"/>
     <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
     <textElement>
      <font/>
     </textElement>
    <textFieldExpression   class="java.lang.String"><![CDATA[$P{book3}]]></textFieldExpression>
    </textField>
   </band>
  </detail>
  <columnFooter>
<band height="30"  isSplitAllowed="true" >
   </band>
  </columnFooter>
  <pageFooter>
   <band height="50"  isSplitAllowed="true" >
   </band>
  </pageFooter>
  <lastPageFooter>
   <band height="50"  isSplitAllowed="true" >
   </band>
  </lastPageFooter>
  <summary>
   <band height="50"  isSplitAllowed="true" >
   </band>
  </summary>
</jasperReport>
在的报表设计文件中,我们依次定义了四个参数,每个参数的数据类型都是字符串。这四个参数的值会在填充报表时获得,下面是填充报表所使用的程序:
public class MyFill
{
     public static void main(String[] args) throws Exception
{
  //创建一个Map对象负责为参数传值
  Map params = new HashMap();
  //依次为报表中的四个参数赋值。
  params.put("author" , "李刚");
  params.put("book1" , "Spring2.0宝典");
  params.put("book2" , "轻量级J2EE企业应用实战");
  params.put("book3" , "基于J2EE的Ajax宝典");
  //填充时,即使无需使用数据源。
  //也必须指定一个新建的JREmptyDataSource实例,而不能直接使用null
  JasperFillManager.fillReportToFile("simpleVariable.jasper" , params , new JREmptyDataSource());
  System.out.println("成功填充了一个报表文件(*.jrprint)");
  System.exit(0);
    }
}
在上面代码中填充报表时,使用了一个Map对象作为参数,这个Map对象负责为报表参数传值,因此这个Map对象的key就是报表设计文件中的参数名,各key对应的value就是报表设计文件中的对应的参数值。
提示:上面填充报表时直接使用了simpleVariable.jasper文件作为源文件,这当然是因为我们已经完成了编译过程。因为将*.jrxml文件编译成一个*.jasper文件与前面使用静态报表的过程大致相似,故此处不再赘述。
经过填充后生成了一个simpleVariable.jrprint文件,使用JasperExportManager可以将该文件导出成一个PDF文档,当然也可以导出成其他格式的文档,导出的Java文件与前面倒出静态JasperReports报表的Java文件没有任何区别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值