列出使用项目的页面的表

时间:2013-03-08 14:32:45

标签: jasper-reports

我正在使用 JasperReports 3.7.6 JavaBeans

我有一个具有树层次结构的报告

我需要在报告的末尾添加一个摘要表,其中列出了树的所有元素的名称以及使用元素的页面。

我的问题是我不知道如何获取 每个元素的页码

我在论坛上四处看看,我猜我必须定义一个变量或类似的东西,但我对Jasper没有多少经验,也不知道从哪里开始。

我想要实现的是这样的:

Name of person | pages used on  
John Smith     | 2,4,6  
Jane Doe       | 1,3  

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。它可能不是最好的,但它有效。我添加了一个参数,它是我创建的Java类。它包含一个列表和一个方法,它接收我需要的字段的id和来自jasper的页码param。我用它来构建我的列表。然后在Jasper报告中我有一个标签,仅用于调用我的bean中的方法。然后,我所要做的就是将索引表放在摘要带中,并告诉它从我构建的列表中获取值。在jasper:

<textFieldExpression class="java.lang.String"><![CDATA[$P{indexData}.addByIndex($F{numberInList},$F{indexLabel},$V{PAGE_NUMBER} + "")]]></textFieldExpression>

在Java中

public class ReportIndexDataAction {

private List<ReportIndexData> reportIndexDataList;

public ReportIndexDataAction() {
    reportIndexDataList = new ArrayList<ReportIndexData>();
}

public List<ReportIndexData> getReportIndexDataList() {
    return reportIndexDataList;
}

public void setReportIndexDataList(List<ReportIndexData> reportIndexDataList) {
    this.reportIndexDataList = reportIndexDataList;
}

public String addByIndex(int index, String name, String page) {
    boolean found = false;
    for (Iterator iterator = reportIndexDataList.iterator(); iterator.hasNext();) {
        ReportIndexData type = (ReportIndexData) iterator.next();
        if(type.getIndex() == index) {
            if(!type.getUsages().contains(","+ page + ",")) {
                type.setUsages((type.getUsages().isEmpty() ? "," + page +"," : type.getUsages() + page + ","));
            }
            found = true;
            break;
        }
    }
    if(!found) {
        ReportIndexData data = new ReportIndexData();
        data.setIndex(index);
        data.setName(name);
        data.setUsages(","+ page + ",");
        reportIndexDataList.add(data);
    }
    return "";
}

public class ReportIndexData {

private int index;
private String name;
private String usages;

public int getIndex() {
    return index;
}
public void setIndex(int index) {
    this.index = index;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getUsages() {
    return usages;
}
public void setUsages(String usages) {
    this.usages = usages;
}

}