1

我找不到在报告生成期间创建变量并修改它的方法。

我已经声明了一个整数变量:

<variable name="my_counter" class="java.lang.Integer" calculation="System">
    <initialValueExpression><![CDATA[new Integer(0)]]></initialValueExpression>
</variable>

这似乎可行,我可以毫无问题地打印它的值。但我想在报告生成期间增加该值:当 XML(报告的数据源)包含某些参数时,我想增加该值(my_counter++)。

我想用伪代码实现:

<textField printWhenExpression="$P{BANANAS}!=null"> ($V{my_counter}++)+" The XML contains <bananas>" </textField>
<textField printWhenExpression="$P{APPLES}!=null"> ($V{my_counter}++)+" The XML contains <apples>" </textField>
<textField printWhenExpression="$P{GRAPES}!=null"> ($V{my_counter}++)+" The XML contains <grapes>" </textField>
<textField printWhenExpression="$P{ORANGES}!=null"> ($V{my_counter}++)+" The XML contains <oranges>" </textField>

包含香蕉、苹果和橙子的 XML 文件的预期结果是:

1. The XML contains <bananas>
2. The XML contains <apples>
3. The XML contains <oranges>

我已经尝试过了,但当前的结果看起来更像这样:

0. The XML contains <bananas>
0. The XML contains <apples>
0. The XML contains <oranges>

所以似乎变量my_counter没有被修改。为什么?如何修改每个显示的 textField 的值?

4

1 回答 1

3

您必须使用可变值持有者而不是java.lang.Integer变量。 java.util.concurrent.atomic.AtomicInteger例如(你不需要原子性,你也可以使用 Commons Lang 的 MutableInt )。

一旦你将你的变量声明为 AtomicInteger,你就可以$V{my_counter}.getAndIncrement()在你的表达式中做。

于 2013-06-18T09:48:12.433 回答