Ken*_*ina 11 jasper-reports javabeans ireport
我正在使用java和iReport(来自jasper)创建一个简单的报告程序,它应该用pdf创建一个报告,显示PC的IP地址,位置,此时是否空闲(由另一个系统处理),以及它目前所附的项目清单(也在其他地方管理).
我正在使用iReport这个问题,并创建了一个虚拟集合生成类,如下所示:
public class PCReports {
public static java.util.Collection PC_collection;
public static java.util.Collection generateCollection() {
PC_collection = new ArrayList<PCLineDTO>();
PCLineDTO line = new PCLineDTO();
line.setIP("192.168.1.1");
line.setLab("location");
line.setActive(true);
line.addProjectName("project1");
line.addProjectName("project2");
line.addProjectName("project3");
PC_collection.add(line);
line = new PCLineDTO();
line.setIp("192.168.1.2");
line.setLab("location2");
line.setActive(false);
line.addProjectName("project1");
line.addProjectName("project2");
PC_collection.add(line);
return PC_collection;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,实体类是:
public class PCLineDTO {
private String ip;
private String lab;
private Boolean active;
private ArrayList<String> projects;
}
Run Code Online (Sandbox Code Playgroud)
在一些互联网搜索之后,我找到了一种使用子报告做类似事情的方法.
问题是,我不知道如何打印作为dataSource传递给该子报表的字符串集合.
在我在Internet上找到的示例中,对于主集合中的每个项目,子报表都传递了一组对象 - 每个属性都有自己的getter方法 - 而不是像这里的情况那样的字符串集合.在这些情况下,他们通过我无法使用的iReport语法访问他们需要使用的值,例如:
$F{project}
Run Code Online (Sandbox Code Playgroud)
由于iReport在其接收的对象中查找包含的getProject方法,但在这种情况下,它是一个简单的String对象(没有getProject方法,因为它).
med*_*pal 19
使用子报表或子数据集.
将子报表传递给集合数据源
JRBeanCollectionDataSource($F{Projects})
Run Code Online (Sandbox Code Playgroud)
然后在新的子报表中创建一个名为"_THIS"的新字段,这意味着传递的集合中的bean与我想要的值相同
有关更多信息,请在此处检查类的源代码:JRAbstractBeanDataSource
注意:这在JasperReport 3.0.0中可用,我不确定它是否存在于以前的版本中.希望这可以帮助
更新:刚刚检查过SVN,好像这个功能是在JasperReports 2.0.0中实现的