当前位置: 首页 > 知识库问答 >
问题:

借助Java代码在JasperReports中添加FilterExpression

宋唯
2023-03-14

我正在Java开发一个工具,可以在JasperReport中进行一些自动化(自动打印、设置参数等)。我主要使用JasperReport库。现在我必须使用Java代码设置过滤器表达式。我知道如何准备参数,我是这样做的:

Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("filter", "where name like '%.'");

然后,我在生成PDF报告时传递此参数:

JasperPrint pdf = JasperFillManager.fillReport(jasperReport, parameters, connection);

如果有这么简单的修改参数的方法,我猜也有类似的修改过滤器表达式的方法。我找了很久,但什么也没找到。

共有2个答案

狄易安
2023-03-14

报告过滤器表达式(或任何其他表达式)只能在JasperDesign对象中设置/更改(请参阅setFilterExpression方法)。JasperDesign对象必须重新编译为JasperReport

过滤器表达式的另一种选择是JR参数。过滤器内置参数,取值a净。旧金山。jasperreports。发动机DatasetFilter实例。JasperReports包括一个名为FieldFilter的实现,该实现在内部用于交互式过滤,但它可能不适合您的需要,在这种情况下,您需要编写自己的DatasetFilter实现。

萧安怡
2023-03-14

由于您使用的是数据库连接,所以我看不到比在查询中进行筛选更好的方法。

这限制了需要从数据库传输和迭代的数据,从而提高了性能并减少了内存使用。

注意,您正在使用$P!()传递整个查询,我可能更喜欢使用准备好的语句只传递值,并使用$P()在jasper报告表达式中设置查询以了解差异请参阅JasperReport:传递参数以进行查询

如果您无法在查询中进行筛选,另一种解决方案是将数据加载到bean中,对其进行筛选,然后将生成的列表作为JRBeanCollectionDataSource传递

 类似资料:
  • 下面的代码算是测试redis-jedis-nutz组合的最小测试代码,请不要忽略它们. 打开MainSetup类,添加如下代码 JedisAgent jedisAgent = ioc.get(JedisAgent.class); try (Jedis jedis = jedisAgent.getResource()) { // Java7的语法

  • 问题内容: 假设我键入“ sout”,智能感知应将其扩展为“ System.out.println()”。有没有添加此类模板的方法? 问题答案: 该功能在Eclipse中称为“代码模板”。您可以使用以下方法添加模板: 窗口->首选项-> Java->编辑器->模板。 两篇好文章: 不要编写代码,生成它 自定义模板 另外,这个SO问题: 有用的Eclipse Java代码模板 已映射到,因此您可以通

  • 8.5.1 代码介绍 热图代码用于加载SiteMonitor JS热图脚本,在网页上正确添加热图代码后,即可实现收集用户的点击行为,利用热图呈现,颜色越深的区域表示点击越多,颜色越浅则表示点击少。 8.5.2 代码导出 后台路径:高阶报告-热图分析,输入分组名称和页面URL后,点击保存并获取代码即可。 导出的代码样例 热图基础代码: stm_clicki('require','heatmap',

  • 8.2.1 代码介绍 用户与网站的交互动作,可利用事件统计代码进行统计。 (简单)事件统计可支持统计3个维度,1个指标的用户交互动作, 代码如下: stm_clicki('send', 'event', '事件分类', '事件动作', '事件标签', 1); 在使用时,替换以上中文内容即可。 其中, 字段名称 数据类型 字段含义 使用注意项 Category 字符串 事件分类 必填项 Action

  • 8.1.1 代码介绍 基础统计代码用于加载SiteMonitor JS监测脚本, 是系统收数的基础。 在网页上正确添加基础统计代码后,即可实现系统诸多报表的数据收集。 8.1.2 代码导出 有以下2种方式可导出代码: 新建站点时,保存并导出基础统计代码 已有站点,通过查看后台的 设置 > 统计代码 导出的代码样例 <script> (function(a, e, f, g, b, c, d) {a

  • 下周我有一个学校项目要做,我正试图找到解决这个问题的方法。问题是开发一个程序,将用户输入的分数相加,直到输入-1。 输入将总是成对和正数 只能使用:int、for、while、if、scanner(因此没有中断或数组) 最好使用GCD,因为需要打印减少的分数和 所以我的问题是: 在用户使用扫描仪键入-1之前,我可以使用同时循环吗? 是否可以使用“同时”让用户输入“无限”(我知道在java中没有这样