Jasper Reports遍历ArrayList表格时参数打印失败问题求助
解决ArrayList表格公共列值作为报表参数的问题
看起来你踩了两个小坑:一是用了静态文本组件(staticText)来显示动态参数,这肯定不行;二是没必要遍历整个列表来取重复值,直接拿第一个元素的对应字段就好。下面给你一步步的解决方案:
1. 提前提取公共参数值(Java代码端)
既然列表里所有行的这个列值都相同,不用遍历全部,直接取第一个元素的对应字段即可,这样更高效。假设你的列表元素是自定义实体类,比如Order,公共字段是batchNo,代码可以这么写:
// 你的ArrayList数据 List<Order> orderList = yourDataSource; Map<String, Object> reportParams = new HashMap<>(); // 提取公共参数,记得判空避免空指针 if (!orderList.isEmpty()) { String commonBatchNo = orderList.get(0).getBatchNo(); reportParams.put("commonBatchNo", commonBatchNo); } // 填充报表时传入这个参数 JasperFillManager.fillReport(jasperReport, reportParams, new JRBeanCollectionDataSource(orderList));
2. 在JRXML中替换staticText为textField
staticText是静态文本,只能写死内容,没法绑定动态参数。你需要把它改成textField,这样才能读取你传入的参数:
<!-- 替换原来的staticText --> <textField> <reportElement style="table_CH" x="948" y="490" width="54" height="20" backcolor="#CCCCCC" uuid="5f8ded52-e8fd-4fd0-8ea3-2b0aaed76545"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="7" isBold="true" isItalic="true"/> </textElement> <!-- 绑定你传入的参数,注意参数名要和Java端一致 --> <textFieldExpression><![CDATA[$P{commonBatchNo}]]></textFieldExpression> </textField>
3. 确保报表定义了该参数
别忘了在JRXML的参数声明部分添加这个参数的定义,否则报表会找不到它:
<!-- 放在报表的<parameters>标签下 --> <parameter name="commonBatchNo" class="java.lang.String"/>
这样操作后,报表就能正确显示这个公共参数值了,不用再做无效的遍历啦~
内容的提问来源于stack exchange,提问作者cape
相关产品推荐
相关产品推荐

