将JasperReports与依赖CDI的数据源结合使用

时间:2013-01-25 13:15:00

标签: jasper-reports cdi

我有一些在其getter中使用CDI注入bean的类,例如:

class MyBean() {
    @Inject
    private TranslationBean translationBean;

    private String chosenValue;

    public void setChosenValue(String c) { chosenValue = c;}
    public String getChosenValue() {
        return translationBean.getTranslatedValue(chosenValue);
    }
}

基础chosenValue从数据库加载并持久存储。

现在我想创建一个JasperReport生成的PDF,其中包含DataSource这样的bean。我打电话给:

JasperFillManager.fillReport("myFile.jasper", new HashMap<String, Object>(), new JRBeanCollectionDataSource(Arrays.asList(myBean));

显然,Weld的错误消息最终将是没有上下文处于活动状态。

我现在看到两种可能性:

  1. MyBean创建一个包装类,尤其是对于JasperReports,其中所有需要的字段都填充了实际数据,并且不需要CDI依赖项。问题是:很多编码都带有很多样板和重复代码。
  2. 以某种方式设法围绕对JasperFillManager的调用包装上下文,使其在/当前活动的CDI上下文中运行。
  3. 第二种选择是否可行?还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果可以包装所有JasperStuff,你可能正在考虑创建一个新的范围。看看https://github.com/seam/reports中的Seam Reports内容,它可能会有所帮助或灵感。