我的问题很简单:
如何处理JasperReports中的异常?
net.sf.jasperreports.engine.JRException:
Error retrieving field value from bean : XXX
为什么我要这个?
如果用户忘记在jrxml中输入/拼写错误的字段名称,我不希望执行停止, 相反,我希望在这种情况下替换某些值,如表达式中的[No Field Found或No Data]。
我已经尝试了
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
jasperReport.setProperty(JasperReport .PROPERTY_WHEN_NO_DATA_TYPE, "Yoooooo");
什么都没发生
答案 0 :(得分:1)
您的bean方法与您的字段不匹配。 在jasper报告中,您对任何字段都有一个getter方法。 可能在这里你的get方法找不到或不可用, 检查你的getter方法并输入getXxx()方法。
答案 1 :(得分:0)
我懂了。
您必须为DataSource创建自己的类,它扩展了JRDataSource的实现
,你必须覆盖方法getFieldValue
所以没有进一步的麻烦......我带给你......解决方案
public class CustomDataSource extends JRBeanCollectionDataSource {
public CustomDataSource(Collection<?> beanCollection) {
super(beanCollection);
}
@Override
public Object getFieldValue(JRField field) throws JRException {
try {
Object returnVal = super.getFieldValue(field);
return returnVal;
} catch (JRException e) {
// You can check for the type of exception like NoSuchMethod or BlaBlaBlackSheep
return new String("[No Feild :" + field.getName() + "]");
}
}
}
你的代码代码如下:
JRDataSource dataSource = new CustomDataSource((Collection<?>)data/*your DTO*/);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, dataSource);
多数民众赞成:)