一尘不染

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

javascript

我正在使用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;
    }
}

在这种情况下,实体类为:

public class PCLineDTO {
    private String ip;
    private String lab;
    private Boolean active;
    private ArrayList<String> projects;
}

在Internet上进行了一些搜索之后,我找到了一种使用子报表执行类似 操作的方法。

问题是,我不知道如何打印作为数据源传递到此子报表的字符串的集合。

在我在Internet上找到的示例中,对于主集合中的每个项目,子报表都传递了一个对象集合-每个属性都具有自己的getter方法-而不是像这里那样的字符串集合。在这些情况下,他们通过iReport语法访问了需要使用的值,例如,我无法使用:

$F{project}

由于iReport会寻找它所接收的对象中包含的getProject方法,但是在这种情况下,它是一个简单的String对象(实际上没有getProject方法)。


阅读 312

收藏
2020-09-16

共1个答案

一尘不染

使用子报表或子数据集。

将子报表传递给集合数据源

JRBeanCollectionDataSource($F{Projects})

然后在新的子报表中完全创建一个名为“ _THIS”的新字段,这意味着传递的集合中的bean与我想要的值相同

有关更多信息,请在此处检查类的源代码:JRAbstractBeanDataSource

注意:JasperReport 3.0.0中提供了此功能,我不确定在以前的版本中是否存在。希望这可以帮助

更新:刚刚检查了SVN,似乎此功能已在JasperReports 2.0.0中实现

2020-09-16