使用node-jasper向报表表格组件传值时表格为空如何解决
问题原因与解决方法
你遇到的表格为空问题是两个配置不匹配导致的,按以下步骤修改即可解决:
1. 修正数据源参数名不匹配问题
你在JRXML中为表格绑定的数据源参数是datasetTable1,但Node代码中传递数据源时用的key是Dataset1,参数名不一致导致表格无法读取到数据源。
修改Node代码中report.data的属性名:
var report = { report: 'hw', data: { title: "My test report", // 把原来的键名Dataset1改成和JRXML对应的datasetTable1 datasetTable1: jasper.toJsonDataSource( { dados: [ {code: 'e1',name: 'raouf',function: 'Developer'}, {code: 'e2',name: 'djamel',function: 'Developer'}, {code: 'e3',name: 'omar',function: 'Medecine'} ] }, 'dados' ), }, // 给主报表加一个空数据源,保证报表主体能渲染 dataset: { dados: [{}] } }
2. (可选)修改JRXML避免主数据源为空时不渲染内容
如果你不想给主报表传空数据源,可以在JRXML的根标签jasperReport上添加whenNoDataType="AllSectionsNoDetail"属性,这样即使主数据源为空,所有报表章节也会正常渲染:
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="repportBI" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" <!-- 新增下面这行配置 --> whenNoDataType="AllSectionsNoDetail" uuid="95744304-ed70-4001-8031-6cec31c7acbf">
3. 重新编译JRXML
修改完JRXML后,需要在Jaspersoft Studio中重新编译生成.jasper文件,替换掉你项目中./jasperFiles/repportBI.jasper旧文件,再重启Node服务测试即可看到表格数据。
内容的提问来源于stack exchange,提问作者Moussaoui Abderraouf
相关产品推荐
相关产品推荐

