Jasper reports 以条件样式使用变量

Jasper reports 以条件样式使用变量,jasper-reports,ireport,Jasper Reports,Ireport,我有一个带有文本字段的标题栏,其中包含一个计算变量$V{avg_perc}。文本字段的评估时间设置为报告,变量重置类型也是如此。 现在,我尝试使用条件样式设置此字段的背景色,但不断收到错误消息,如: Invalid expression: !Double.isNaN($V{avg_perc}) && $V{avg_perc} >= 0.8 我在列页脚中使用相同的条件样式执行完全相同的操作,即使我将此字段的评估时间设置为报告,它也不会出现任何问题 删除后!Double.is

我有一个带有文本字段的标题栏,其中包含一个计算变量
$V{avg_perc}
。文本字段的评估时间设置为报告,变量重置类型也是如此。 现在,我尝试使用条件样式设置此字段的背景色,但不断收到错误消息,如:

Invalid expression: !Double.isNaN($V{avg_perc}) && $V{avg_perc} >= 0.8
我在列页脚中使用相同的条件样式执行完全相同的操作,即使我将此字段的评估时间设置为报告,它也不会出现任何问题

删除
后!Double.isNaN($V{avg_perc})
我不再收到错误,但表达式仍然不起作用。我的字段保持红色,这是在没有任何条件有效时的基本颜色,无论使用哪个值
$V{avg_perc}
。不过,它在列页脚中仍然有效。这是我的风格:

<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>

= 0.8]]>
=0.6&$V{avg_perc}<0.8]>
为此使用的字段和变量:

<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。

我终于找到了问题的解决方案。添加

<property name="net.sf.jasperreports.style.evaluation.time.enabled" value="true"/>

在报告级别,导致在计算元素时执行条件样式。
有关更多信息,请参阅Jaspersoft社区中的。

在您的视图ireport designer中

单击字段并在“属性”面板中:markup=styled selected

右键单击菜单。编辑表达式:

($F{fila1}.equals("c") ? "<style forecolor='red'>"+ $F{fila1}+"</style>" : $F{fila1})
($F{fila1}.equals(“c”)?“+F{fila1}+”:$F{fila1})
或xml

<textFieldExpression><![CDATA[($F{fila1}.equals("c") ? "<style forecolor='red'>"+ $F{fila1}+"</style>" : $F{fila1})]]></textFieldExpression>

根据您的要求修改此代码

<style name="alternateStyle" fontName="Arial">
    <conditionalStyle>
        <conditionExpression><![CDATA[new Boolean($V{AMOUNT}.intValue() == 0)]]></conditionExpression>
        <style mode="Opaque" backcolor="#FF0000" isBold="true"/>
    </conditionalStyle>
</style>


也请参考此链接:

此属性的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
对我有效-我更改了字段上的变量。我将字段和变量定义添加到我的问题中。IMHO,条件样式中的表达式与evaluationTime等于Now的值一样有效。您可以通过简单的测试来检查这一点-您可以添加两个字段,其中包含
和不同的evaluationTime属性值(Now和Report),以使标题栏的值为true。我尝试将avg_perc设置为0.9的固定值,并将resetType设置为None,无论为字段设置了哪个evaluationTime,它都起到了作用。将字段的evaluationTime设置为Now,并将计算变量作为值,会导致其输出为null(这是我在中遇到的问题),并且其颜色为红色。我希望我能以某种方式让它工作,我真的不想在Java中预先计算平均值。