我找不到在报告生成过程中创建变量并修改它的方法。
我已经声明了一个整数变量:
<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的值?
答案 0 :(得分:2)
您必须为变量使用可变值持有者而不是java.lang.Integer
。例如java.util.concurrent.atomic.AtomicInteger
会做(你不需要原子性,你也可以使用Commons Lang的MutableInt)。
将变量声明为AtomicInteger后,您可以在表达式中执行$V{my_counter}.getAndIncrement()
。