我有一些类在他们的 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
. 我打电话:
JasperFillManager.fillReport("myFile.jasper", new HashMap<String, Object>(), new JRBeanCollectionDataSource(Arrays.asList(myBean));
显然,来自 Weld 的错误消息最终将是没有上下文处于活动状态。
我现在看到两种可能性:
- 为 JasperReports创建一个包装类
MyBean
,其中所有需要的字段都填充了实际数据,并且不需要 CDI 依赖项。问题将是:大量的代码带有大量的样板和重复代码。 - 不知何故,设法围绕调用包装一个上下文,
JasperFillManager
以便它在一个/当前活动的 CDI 上下文中运行。
第二种选择可行吗?还有比提议的方法之一更好的方法吗?