2013-03-08 30 views
0

我正在使用JasperReports 3.7.6JavaBeans列表页面上使用的项目

我有了一个树状分层结构

我需要在报告中列出树的所有元素,并在那里被使用的元素的网页的名称的末尾添加汇总表的报表。

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

我环顾论坛,我猜我必须定义一个变量或类似的东西,但我没有太多的Jasper经验,不知道从哪里开始。

我试图做到的,是这样的:

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

你有什么可以证明你试过的东西吗? – Magnilex 2013-03-08 14:51:23

+0

显示你的努力'你的代码'? – 2013-03-08 15:07:20

+0

我没有获取每个元素的页码的任何代码,我确实有报告的树层次结构部分,但在这里没有任何帮助。我在帖子中说,我甚至不知道从哪里开始获取页码。我到现在为止一直在努力寻找解决方案。我甚至不想要一个完整的解决方案。任何提示都会有所帮助。 – SFlorin 2013-03-08 15:18:30

回答

0

我已经找到了我的问题的解决方案。它可能不是最好的,但它的工作原理。我添加了一个我创建的Java类的参数。它包含一个列表和一个方法,它接收我需要的字段的id和来自jasper的页码参数。我用它来建立我的列表。然后在Jasper报告中,我有一个标签只用于在我的bean中调用方法。然后,所有我需要做的就是把索引表中总结带,并告诉它来从列表我built.In碧玉值:

<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; 
} 

}

相关问题