如何在iReport中打印另一个列表中包含的字符串列表?

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中实现的