从外部Java代码使用Jasper str函数

时间:2016-07-30 07:50:39

标签: java jasper-reports resourcebundle

我有一个Jasper报告,它检索包含带键值对的XML数据的CLOB字段,我写了一个读取CLOB的类,解析XML并返回包含键值对的MAP。有没有办法在iReport中解析地图并能够将Jasper函数应用于它(例如str(...))?

为了澄清事情,密钥是附加到报告的资源文件的密钥,这就是我需要str函数的原因。

我尝试将其作为单个字符串而不是地图返回,包含$R{KEY}str(KEY),但没有运气,它们都被解析为字符串。

任何想法或解决方法?

编辑1: 检索到的地图大小未知,它可能包含一个键值条目或十个键值条目,具体取决于数据库中存储的内容。此外,密钥很重要,我需要它们在资源文件中的值。见下面的样本:

资源文件:

key1 = Brand
key2 = Price
key3 = Location
...

从数据库中检索第1行的地图是:

key1: BMW
key2: 20000
key3: Germany

从数据库中检索第2行的地图是:

key1: Audi
key2: 30000

报告中所需字段的输出应为:

row 1:
Brand BMW
Price 20000
Location Germany

row2:
Brand Audi
Price 30000

编辑2: 我能够做一些我想要的东西,但在我看来,以一种令人讨厌的方式,我做的是我写了一个类来获取CLOB并返回一个带键值对的地图,我做了以下内容jrxml:
- 包含此地图的变量MAP,其表达式为path.to.class.getMap($F{CLOB_DATA})
- 一个变量KEY_IT,它包含一个用于键$V{MAP}.entrySet().iterator()的迭代器 - 变量VAL_IT,它包含一个用于值$V{MAP}.entrySet().iterator()

的迭代器

现在,我可以使用这样的迭代器:

row 1, cell 1:
$V{KEY_IT}.hasNext() ? str((String)((Map.Entry)$V{KEY_IT}.next()).getKey()) : ""

row 2, cell 1:
$V{KEY_IT}.hasNext() ? str((String)((Map.Entry)$V{KEY_IT}.next()).getKey()) : ""

.
.
.

row 1, cell 2:
$V{VAL_IT}.hasNext() ? (String)((Map.Entry)$V{VAL_IT}.next()).getValue() : ""

row 2, cell 2:
$V{VAL_IT}.hasNext() ? (String)((Map.Entry)$V{VAL_IT}.next()).getValue() : ""

.
.
.

但是,我不得不在彼此之下放置这么多单元格,包含相同的表达式,所以这是最糟糕的部分,如果我有一个条目或20个条目,报告将是相同的高度,同样,有一个最大值对于条目,因为我必须将它们专门放在文本字段中并给它们表达,是否有更好的方法来做到这一点?

0 个答案:

没有答案