IReport主从报表中出现的问题[转载]

 
IReport 主从报表中出现的问题[转载]
  最近在使用 IReport JasperReport Web 报表时遇到如下问题:
  在 IReport , 主从报表完成制作后,在 IReport 中能够正常编译、运行及显示 ,但 加入Java Web 应该中时 出现 下列 错误
Could not load object from location : subunitlab.jasper , 即主报表找不到子报表的模板( jasper )文件 .
  主要原因:
  主报表找不到子报表的 Jasper 文件(深入分析)
  解决办法:
  在主报表中设置变量 SUBREPORT_DIR (若不存在则新建),代表子报表模板文件的真识路径 , 设置子报表的属性 Subreport Expression 的值为: $P{SUBREPORT_DIR}+"subreportname.jasper" ,通过程序动态设置 SUBREPORT_DIR, 使得主报表能够获得子报表模板文件的真识路径 .
  步骤如下:
   1 . 设置主报表变量 : SUBREPORT_DIR
设置 Default value à Modify à 选中 SUBREPORT_DIR 变量名 à Parameters à   Veiw Expression 的值为 :””
  
  2. 修改子报表属性
  
在主报表中右击子报表, 选择Subreport(other)选项 ,设置 Subreport Expression 的值为: $P{SUBREPORT_DIR}+"subreportname.jasper"
  
  3. Action 动态获得子报表的真识路径 ,设置成 SUBREPORT_DIR 变量的值: param. setParameters (" SUBREPORT_DIR ", request.getRealPath("/Reports/")+"/" );
另:对于多个子报表,做法类似,只需设置子报表属性即可 ( 前提 : 所有子报表存放在同一路径下 ), 若存放在不同的路径下 , 需在主报表中建立多个表示子报表路径的变量 , 一一对应到各个子报表上 , 并通过程序一一设定其真识路径 .
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以在iReport使用一个特殊的变量"$V{PAGE_NUMBER}"来判断当前页码是否为第一页,从而控制PageHeader的显示。 具体操作步骤如下: 1. 右键点击报表设计区域,选择“Report Properties”,打开报表属性设置窗口。 2. 在“Parameters”选项卡,点击“Add”按钮,添加一个参数,命名为“isFirstPage”,类型为“java.lang.Boolean”。 3. 在“Variables”选项卡,点击“Add”按钮,添加一个变量,命名为“pageHeaderDisplayed”,类型为“java.lang.Boolean”,初始值为“false”。 4. 在报表设计区域添加一个PageHeader元素,并在其添加需要显示的内容。 5. 右键点击PageHeader元素,选择“Properties”,打开元素属性设置窗口。在“Print When Expression”文本框输入以下表达式: $V{PAGE_NUMBER} == 1 && $P{isFirstPage} == true && $V{pageHeaderDisplayed} == false 这个表达式的意思是:如果当前页码为1,并且isFirstPage参数为true,并且pageHeaderDisplayed变量为false,则显示PageHeader元素。 6. 在PageHeader元素的“Properties”窗口到“Print When Expression”属性下方的“Evaluation Time”选项,选择“First Page”。 7. 在报表Java代码设置isFirstPage参数为true,并在PageFooter设置pageHeaderDisplayed变量为true,以确保PageHeader只在第一页出现。 参考代码如下: ``` Map<String, Object> params = new HashMap<String, Object>(); params.put("isFirstPage", true); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource); // 在PageFooter设置pageHeaderDisplayed变量为true JRDesignVariable pageHeaderDisplayed = new JRDesignVariable(); pageHeaderDisplayed.setName("pageHeaderDisplayed"); pageHeaderDisplayed.setValueClass(Boolean.class); pageHeaderDisplayed.setResetType(ResetTypeEnum.REPORT); pageHeaderDisplayed.setCalculation(CalculationEnum.NOTHING); pageHeaderDisplayed.setIncrementerFactoryClass(DefaultIncrementerFactory.class); pageHeaderDisplayed.setIncrementerFactoryClassName(DefaultIncrementerFactory.class.getName()); pageHeaderDisplayed.setInitialValueExpression(new JRDesignExpression(Boolean.FALSE)); jasperDesign.addVariable(pageHeaderDisplayed); ``` 这样就可以实现PageHeader只在第一页出现了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值