Java 如何将JRBeanCollectionDataSource传递到iReport?
我目前正在尝试使用jasper来帮助我创建报告。我有我想要在这个方法中显示的信息和数据:Java 如何将JRBeanCollectionDataSource传递到iReport?,java,jasper-reports,javabeans,datasource,Java,Jasper Reports,Javabeans,Datasource,我目前正在尝试使用jasper来帮助我创建报告。我有我想要在这个方法中显示的信息和数据: private void writeToFile(final List<ScenarioLoadModel> sceneLoadModel) throws Exception { final BufferedWriter bw = new BufferedWriter(new FileWriter("/Uma/nft/result.psv")); for (final Scenario
private void writeToFile(final List<ScenarioLoadModel> 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<String, BigDecimal> metricMap = new HashMap<String, BigDecimal>();
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();
}
private void writeToFile(最终列表sceneLoadModel)引发异常{
final BufferedWriter bw=new BufferedWriter(new FileWriter(“/Uma/nft/result.psv”);
用于(最终场景加载模型slm:sceneLoadModel){
写入(slm.getScenarioId()+PSP+slm.getScenarioId()+PSP+slm.getScenarioConfig().getName()+PSP+slm.getLoad()+PSP+“”+EOL);
如果(!slm.getScenarios().isEmpty()){
final int tempCount=slm.getScenarios().get(0.getTemplates().size();
final int sceneCount=slm.getScenarios().size();
对于(int-tempIdx=0;tempIdx
根据我的理解,我创建Bean,然后将它们全部放在Bean工厂中,以创建准备好传递给iReport的对象
如何将所有这些信息放入一个Bean中?我本质上希望bean包括场景/测试用例以及它是否通过。(这是为了测试自动化)我试图阅读您的代码,以便对您想要的列进行最佳猜测,但由于没有上下文,我没有任何线索。所有bean都是一个pojo,具有私有字段和公共getter和setter 假设没有分组,并且基本上每个
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<ScenarioResults> dataBeanList = ...call your method to get the list of results
//create the datasource
JRDataSource dataSource = new JRBeanCollectionDataSource(dataBeanList);
现在您需要在iReport中创建一个指向它的数据源
新建
javabeanssetdatasource
。单击下一步ScenarioResultsFactory
com
包中,您应该在这里有com.ScenarioResultsFactory
createBeanCollection
李>
使用字段描述复选框。单击Test
以确保它工作正常
保存
哇,这帮了我很大的忙。谢谢你的回复。这正是我要问的。我不明白为什么在我看到的所有示例中,Bean工厂中的所有字段都是硬编码的。非常感谢你。我很感激。@qwer1234没问题,很高兴我能帮忙。起初我没想到答案会这么长,但当我打字的时候,它就发生了。谢谢,哈哈。是的,你的解释非常简单明了。
import java.util.ArrayList;
import java.util.List;
public class ScenarioResultsFactory {
public static List<ScenarioResults> createBeanCollection() {
List<ScenarioResults> list = new ArrayList<ScenarioResults>();
list.add(new ScenarioResults("1", "test", "load", 10, 5));
//add as many as you want
return list;
}
}