我有一些在其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的错误消息最终将是没有上下文处于活动状态。
我现在看到两种可能性:
MyBean
创建一个包装类,尤其是对于JasperReports,其中所有需要的字段都填充了实际数据,并且不需要CDI依赖项。问题是:很多编码都带有很多样板和重复代码。JasperFillManager
的调用包装上下文,使其在/当前活动的CDI上下文中运行。 第二种选择是否可行?还有其他更好的方法吗?
答案 0 :(得分:0)
如果可以包装所有JasperStuff,你可能正在考虑创建一个新的范围。看看https://github.com/seam/reports中的Seam Reports内容,它可能会有所帮助或灵感。