0

在 iReport 3.1.2 中编译我的 JRXML 文件时出现此错误:

com.jaspersoft.ireport.designer.errorhandler.ProblemItem@f1cdfb The operator > is undefined for the argument type(s) java.lang.Integer, java.lang.Integer net.sf.jasperreports.engine.design.JRDesignExpression@eb40fe

在我的整个报告中,我使用运算符 > 的唯一地方是:

<parameter name="dynamicSectionCondition" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[($P{sectionId} != null && $P{sectionId} > new Integer("0")) ? new String("AND loctn_sctn_id = " + $P{sectionId}) : new String("")]]>
    </defaultValueExpression>
</parameter>

谷歌在这方面不是我的朋友。任何 Jasper 模板专家都对发生的事情有一个模糊的想法?

4

2 回答 2

2

弄清楚如何比较 JRXML 中的 2 个整数。而不是这样做:

$P{sectionId} > new Integer("0")

解决方案是这样的:

$P{sectionId}.compareTo(new Integer("0")) != 0

这看起来有点令人费解,但它对我有用。:)

于 2009-10-05T21:42:02.797 回答
0

尽管你和你自己之间的这段兰斯洛特爵士的独白,已经很久了,而且起源于中世纪,但我必须向那些可能想把这个古老的传说带到他们的图书馆的旅行者发出一个公平的警告。

如果您想知道 $P{sectionId} 是否大于 new Integer("0"),那么即使 $P{sectionId} 小于 new Integer("0"),您的解决方案也会得出正确的结果。

原因:

(new Integer("-5")).compareTo(new Integer("0"))

会导致:

-1

这不会是 0,如:

$P{sectionId}.compareTo(new Integer("0")) != 0

因此条件也为

只需使用:

$P{sectionId}.compareTo(new Integer("0")) == 1

记住:

x.compareTo(0) == 1 (if x > 0)
x.compareTo(0) == 0 (if x == 0)
x.compareTo(0) == -1 (if x < 0)

抱歉,如果您已经了解基础知识并且您的第二篇文章只是为了展示解决问题的常用方法,但我认为如果新手正在阅读您的第一篇文章,他/她可能会假设,一个人能够找到大于0,与发布的解决方案。

于 2014-05-28T17:27:55.220 回答