如何处理从bean中的错误检索字段值:JasperReport中的XXX异常

时间:2015-01-12 11:42:27

标签: jasper-reports

我的问题很简单:

如何处理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");

什么都没发生

2 个答案:

答案 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);

多数民众赞成:)