【发布时间】:2012-09-04 18:59:27
【问题描述】:
我有一个 Title 带,其中有一个 Text Field 包含计算的 Variable $V{avg_perc}。 Text Field 的 evaluationTime 设置为 Report,与 Variables resetType 相同.
现在我正在尝试使用 Conditional Style 设置此字段的背景颜色,但我不断收到一条错误消息,内容如下:
Invalid expression: !Double.isNaN($V{avg_perc}) && $V{avg_perc} >= 0.8
我在 Column Footer 中使用相同的 条件样式 做完全相同的事情,即使我设置了 evaluationTime,它也可以正常工作 也为该字段报告。
删除!Double.isNaN($V{avg_perc}) 后,我不再收到错误消息,但表达式仍然不起作用。当没有任何条件有效时,无论$V{avg_perc} 具有哪个值,我的字段都保持红色,这是基本颜色。不过,它仍然可以在 Column Footer 中使用。这是我的风格:
<style name="avg_color" mode="Opaque" backcolor="#FF0000" pdfFontName="Helvetica-Bold">
<conditionalStyle>
<conditionExpression><![CDATA[$V{avg_perc} >= 0.8]]></conditionExpression>
<style backcolor="#008000"/>
</conditionalStyle>
<conditionalStyle>
<conditionExpression><![CDATA[$V{avg_perc} >= 0.6 && $V{avg_perc} < 0.8]]></conditionExpression>
<style backcolor="#FFCC00"/>
</conditionalStyle>
</style>
为此使用的字段和变量:
<field name="perc" class="java.lang.Double"/>
<variable name="avg_perc" class="java.lang.Double" calculation="Average">
<variableExpression><![CDATA[$F{perc}]]></variableExpression>
</variable>
知道如何让这个东西工作吗?我在 3.7.4 版本中使用 JasperReports 和 iReport。
【问题讨论】:
-
这个属性的iReport设置是什么:org.eclipse.jdt.core.compiler.source, org.eclipse.jdt.core.compiler.compliance,org.eclipse.jdt.core.compiler.codegen.TargetPlatform?
-
你能发布 avg_perc 变量定义吗?顺便说一句,表达式
!Double.isNaN($F{avg_perc}) && $F{avg_perc} >= 0.8对我有用 - 我已经更改了字段上的变量。 -
我在我的问题中添加了字段和变量定义。
-
恕我直言,conditionalStyle 中的表达式的工作方式类似于 evaluationTime 的值等于 现在。您可以通过简单的测试来检查这一点 - 您可以添加两个 fields 和
<textFieldExpression class="java.lang.Double"><![CDATA[$V{avg_perc}]]></textFieldExpression>以及 的不同值(Now 和 Report) evaluationTime 属性 -
对于 Title 乐队来说似乎是正确的。我尝试将 avg_perc 设置为 0.9 的固定值,并将 resetType 设置为 None 并且不管哪个 evaluationTime 为字段设置。将字段的 evaluationTime 设置为 Now 并将计算变量作为值会导致其输出为 null (这是我在stackoverflow.com/questions/12259979/… 中的问题) 并且其颜色为红色。我希望我能以某种方式让它工作,我真的不想在 Java 中预先计算平均值。