如何修复JasperReports传递JavaBean作为报表参数时的异常?
解决JasperReports传入POJO参数的属性访问问题
你碰到的这个报错,根源是JasperReports的参数表达式语法和普通Java代码不一样——你写的$P{caseDescription.userName}会被Jasper误认为是一个叫caseDescription.userName的独立参数,而不是去访问caseDescription这个POJO对象的userName属性,这就导致了Parameter not found的异常。
正确的属性访问方式
要获取POJO参数的属性,你需要在表达式里直接调用对应的getter方法,就像你在Java代码里做的那样:
把你的文本字段表达式改成这样:
<textFieldExpression><![CDATA["Accused : " + $P{caseDescription}.getUserName()]]></textFieldExpression>
其他属性的访问同理:
- 获取ID:
$P{caseDescription}.getId() - 获取logo路径:
$P{caseDescription}.getLogoPath() - 获取地点:
$P{caseDescription}.getLocation()
额外需要确认的细节
除了表达式写法,还有两个点要检查:
- 参数类路径是否正确:jrxml里
parameter标签的class属性path.to.case.description.package.CaseDescription必须和你实际的CaseDescription类的全限定包名完全一致,大小写也不能错。 - 参数名是否匹配:你代码里
parameters.put("caseDescription", caseDescription);的键名和jrxml中参数的name属性完全一致,这部分你已经做对了,不用改。
验证逻辑
你之前测试把表达式改成$P{caseDescription}能正常调用toString(),说明POJO参数本身已经正确传入报表了,只是属性访问的写法不符合Jasper的表达式规则。换成getter方法的写法后,就能正常读取属性值了。
内容的提问来源于stack exchange,提问作者ZhenyaM
相关产品推荐
相关产品推荐

