如何将JRBeanCollectionDataSource传递给iReport?
我目前正在尝试使用jasper来帮助我创建报告。 我有这个方法中显示的信息和数据:
private void writeToFile(final List sceneLoadModel) throws Exception { final BufferedWriter bw = new BufferedWriter(new FileWriter("/Uma/nft/result.psv")); for (final ScenarioLoadModel slm : sceneLoadModel) { bw.write(slm.getScenarioId() + PSP + slm.getScenarioId() + PSP + slm.getScenarioConfig().getName() + PSP + slm.getLoad() + PSP + "" + EOL); if (!slm.getScenarios().isEmpty()) { final int tempCount = slm.getScenarios().get(0).getTemplates().size(); final int sceneCount = slm.getScenarios().size(); for (int tempIdx = 0; tempIdx < tempCount; tempIdx++) { String id = null; int pass = 0; int fail = 0; final Map metricMap = new HashMap(); final DefaultStatisticalCategoryDataset dataset = new DefaultStatisticalCategoryDataset(); for (int sceneIdx = 0; sceneIdx < sceneCount; sceneIdx++) { final Template temp = slm.getScenarios().get(sceneIdx).getTemplates().get(tempIdx); if (temp.isError()) { fail++; } else { pass++; } if (sceneIdx == 0) { id = temp.getId(); } final MetricGroupModel mgm = slm.getScenarios().get(sceneIdx).getMetricGroupModel().get(tempIdx); if (mgm != null) { for (final MetricModel mm : mgm.getMetricModel()) { for (final MetricValue mv : mm.getMetricValue()) { dataset.add(mv.getValue(), new BigDecimal(0.0), mv.getType(), id); } } } } final TemplateConfig tc = TemplateManager.getTemplateConfig(id); bw.write(slm.getScenarioId() + PSP); bw.write(id + PSP + tc.getName() + PSP + 1 + PSP + pass + "/" + fail); for (final Object row : dataset.getRowKeys()) { final Number mean = dataset.getValue((String) row, id); bw.write(PSP + row + PSP + mean); } bw.write(EOL); } } } bw.close(); }
根据我的理解,我创建了Beans,然后将它们全部放在Bean Factory中,以创建我的对象,该对象将准备传递给iReport。
如何将所有这些信息放入Bean? 我基本上希望bean包含场景/测试用例以及它是否通过。 (这是用于测试自动化)
我试着阅读你的代码,以便最好地猜测你想要的列,但没有上下文,我不知道。 所有的豆子都是pojo,有私人田地和公共吸气者和孵化器。
假设没有分组,并且基本上每个ScenarioLoadModel
将对应于报告中的一行,您最终会得到一个像这样的bean:
public class ScenariaResults { private String id; private String name; private String load; private int passCount; private int failCount; public ScenariaResults(String id, String name, String load, int passCount, int failCount) { super(); this.id = id; this.name = name; this.load = load; this.passCount = passCount; this.failCount = failCount; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLoad() { return load; } public void setLoad(String load) { this.load = load; } public int getPassCount() { return passCount; } public void setPassCount(int passCount) { this.passCount = passCount; } public int getFailCount() { return failCount; } public void setFailCount(int failCount) { this.failCount = failCount; } @Override public String toString() { return "ScenariaResults [id=" + id + ", name=" + name + ", load=" + load + ", passCount=" + passCount + ", failCount=" + failCount + "]"; } }
因此,基本上在上面的代码中,您构建了ScenarioResults
实例并将它们添加到列表中。 获得列表后,您需要做的就是创建一个JRDataSource:
List dataBeanList = ...call your method to get the list of results //create the datasource JRDataSource dataSource = new JRBeanCollectionDataSource(dataBeanList);
现在,在iReport中设计报表时,自动导入字段可能会有点棘手。 基本上首先将你的项目与bean一起添加到iReports中的类路径中(可以将它指向bin文件夹或jar文件`):工具 – >选项 – >类路径选项卡。 现在,请按照以下步骤添加字段。
- 单击以下图标:
- 选择
JavaBean Datasource
选项卡。 - 输入bean的类名。 (例如
ScenarioResults
) - 单击
Read attributes
- 在报告中突出显示所需的字段,然后单击“
Add Selected Field(s)
。 - 单击
OK
。
现在,如果您想测试报告与数据的相似之处,而不仅仅是空数据源,那么这就是Factory的用武之地。 它仅用于使用iReport进行测试。 您需要创建一个基本上为您创建虚拟数据集的类。 它应该看起来像:
import java.util.ArrayList; import java.util.List; public class ScenarioResultsFactory { public static List createBeanCollection() { List list = new ArrayList (); list.add(new ScenarioResults("1", "test", "load", 10, 5)); //add as many as you want return list; } }
现在,您需要在iReport中创建指向它的数据源。
- 在工具栏中的“数据源”下拉列表旁边,单击带有工具提示“报表数据源”的图标。
- 单击
New
。 - 选择
JavaBeans set datasource
。 单击Next
。 - 对于name,输入
ScenarioResultsFactory
。 - 对于Factory类,您需要将classname包括在内。 因此,如果该类在
com
包中,则应在此处具有com.ScenarioResultsFactory
。 - 对于静态方法,如果尚未存在
createBeanCollection
。 - 选中
Use field description
复选框。 单击“Test
以确保其有效。 - 单击
Save
。
- 我应该在应用程序或应用程序服务器中定义数据源吗?
- java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z
- 轻松启动独立JNDI服务器(并注册一些资源)
- 防止JBoss 7上的JNDI数据源的Oracle连接自动提交(Jeeves DBMS)
- java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver:我加载了正确的驱动程序吗?
- 如何在spring中覆盖JndiObjectFactoryBean并在java中设置解密密码
- Out容器JNDI数据源
- MyBatis-guice 3.3 +多个数据源+属性+ scriptrunner
- Spring Boot jdbc数据源自动配置在独立的tomcat上失败