如何设置变量值"打印表达式"从textfield返回true

时间:2016-08-17 13:08:37

标签: jasper-reports conditional-formatting

使用iReport我有一个文本字段,其中包含以下" Print When Expression":

new Boolean($F{data}.doubleValue()<3 && $V{check}.intValue()==0);

我的问题是我只想打印一次这个文本字段。为此我想我可以使用变量(check)。

我尝试将此表达式用于变量:

($F{data}.doubleValue()<3) ? 1 : 0

问题是在文本字段检查&#34;打印条件&#34;之前调用变量的表达式。所以文本字段永远不会被打印出来。

如何在文本字段&#34;打印条件&#34;之后设置变量值?是真的吗?

  

我想标记第一个小于参考值的值

2 个答案:

答案 0 :(得分:3)

我经常使用参数map(P{REPORT_PARAMETERS_MAP})来存储和评估自定义表达式,具体取决于之前的值和输出

示例(如果值为true,则返回$F{X}<100且之前从未低于此值)

<printWhenExpression>
     <![CDATA[$F{X}.doubleValue()<100?$P{REPORT_PARAMETERS_MAP}.put("X_LESS_100",true)==null?true:false:false]]>
</printWhenExpression>

此表达式利用Map.put(K,V)返回与key关联的先前值的事实,如果从未调用null,则第二次$F{X}低于100时将返回我们之前的设置值为true

  

注意:您无需定义任何变量。

答案 1 :(得分:1)

我找到了一种解决方法,但我觉得这不是一个很好的方法,因为我的解决方案与文本字段和变量的条件评估时间有关。

所以,如果有人有一个很好的解决方案,请发布。

我将check变量的初始值设置为0

变量表达式如下所示:

($F{data}.doubleValue() >= 3)? 0 : ($F{data}.doubleValue() < 3 && $V{check}.intValue()==0) ? 2 : 1;

文本字段中的“表达时打印”为:

new Boolean($V{check}.intValue()==2);