任何人都可以帮助我在Jaspersoft Server中添加Bean DataSource(bean集合)的分步过程吗?是否有一个直接推送jar文件的过程,以便服务器可以识别它?
这是我做的步骤(简化名称)
在Studio项目中
创建一个名为 Person 的Java Bean,其中包含字段和getter / setter
创建一个连接到名为 com.company.test.PersonFactory 的数据库的简单Java类,它有一个方法 generator(),它返回一个 List ,它使用简单的jdbc调用,这两个类都在我的Jasper项目中
创建名为 testBean 的数据适配器,并将 com.company.test.PersonFactory 作为Factory类和生成器输入为Factory中的静态方法。 / p>
创建新的jasper报告( testReport1 )并使用数据适配器 testBean ,单击Java Bean选项卡,输入人作为类名,添加所有字段,验证数据预览,然后保存
在资源库资源管理器中
创建新数据源>数据源Bean,输入 bean1 作为名称和ID
在Bean Name and Bean方法页面,选择从Jaspersoft Studio导入并选择 testBean ,单击完成
在Studio项目中
验证Jaspersoft Studio中的数据预览是否有效后,在Jasper Server中发布报告
选择 bean1 数据源并发布
在Jaspersoft Server中
运行报告testReport1
得到错误
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 名为'com.company.test.PersonFactory'的bean定义于 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:575)
org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1111) 在
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:276) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191) 在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1119) 在 com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.BeanReportDataSourceServiceFactory.createService(BeanReportDataSourceServiceFactory.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at ....
任何人都可以帮我做一些关于如何在Jaspersoft Server中识别Bean和Factory的最简单步骤吗?
由于
答案 0 :(得分:1)
我在最初的问题后一周解决了这个问题。我只想分享答案:
应该通过实现 ReportDataSourceService 的类来访问jaspersoft Bean DataSource。
然后,它应该有一个私有变量
private JRBeanCollectionDataSource dataSource;
另外,您需要覆盖2个方法
@Override
public void closeConnection() {
// TODO Auto-generated method stub
}
@Override
public void setReportParameterValues(Map parameterMap) {
parameterMap.put(JRParameter.REPORT_DATA_SOURCE, dataSource);
}
然后从Jasper服务器,您需要定义工厂类,该工厂类调用您创建的 ReportDataSourceService 实现的类的构造函数,并返回ReportDataSourceService类型