繁体   English   中英

DynamicJasper:访问连续报表中动态列的值

[英]DynamicJasper: accessing values for dynamic columns in a concatenated report

我需要在DynamicJasper中创建一个包含多个“子报表”的报表,其中包含不同的列。 列的数据存储在每个行Object上的HashMap中。 我没有在DynamicJasper中找到任何方法来指定列的值应该来自HashMap上的特定键。

我发现如果我构建一个报告,我可以扩展JRAbstractBeanDataSource并创建我自己的数据源,它知道如何根据我格式化字段名称来正确获取数据。 但是,当我使用addConcatenatedReport添加多个报表时,“子报表”使用JRBeanCollectionDataSource而不是我的自定义数据源。

到目前为止,我提出的唯一解决方案是让POJO具有一系列属性,如“column1value”和“column2value”,我预先加载并用于动态列中的字段引用。 真的不想这样做......任何人都可以想到其他选择吗? 我错过了什么?

旁注:为什么不能将自定义数据源类型传递给addConcatenatedReport函数的任何想法? 技术问题,还是只是不需要? 这似乎是对“动态”报告的共同需求。

昨天我正在寻找同样的事情,我遇到了你的帖子(我看到它是最近的)。 经过一番搜索,我设法克服了这个问题,所以我觉得与你分享我的发现会很高兴。

我假设您为数据定义了一个POJO,然后将所有这些对象添加到HashMap中(如果我是正确的话,请更正我)。

我所做的是创建一个扩展HashMap实现的新Object。 (事实上​​你不必扩展它,你可以使用HashMap对象本身)。 所以现在我没有在HashMap中使用对象,而是直接插入属性的值。 但是,我们只需添加一些代码块就可以清除:)

假设你有以下PoJO

public class MyPOJO{

  private String name;
  private String value;
  //getters, setters etc..
 }

不是将这些不同的对象添加到List并将其作为数据源提供,您可以使用HashMap以这种方式定义对象:

Map<String,String> myObject1=new HashMap<String,String>();
myObject1.put("name","Name1");
myObject1.put("value","Value1");

Map<String,String> myObject2=new HashMap<String,String>();
myObject2.put("name","Name2");
myObject2.put("value","Value2");

定义这些对象后,我们可以将它们添加到List中并将其作为数据源( JRBeanCollectionDataSource )提供。 因此,每个HashMap的键被认为是Columns中定义的属性(初始POJO的属性)。

我不知道我的解决方案是否是最好的,但它对我有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM