2009-10-02 56 views
0

编译我的JRXML文件时的iReport 3.1.2我得到这个错误:JRXML操作错误

​​

在我使用的是运营商我的整个报告中的唯一的地方>是在这里:

<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模板专家对发生的事情有一个模糊的想法?

回答

1

想出如何比较2个整数的JRXML。相反,这样做的:

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

解决的办法是这样的:

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

这看起来有点令人费解,但它为我工作。 :)

0

虽然你和你自己兰斯洛特之间的独白,是年龄在medival次老起源,我不得不给出一个公正的警告,可能想借此古老的传说,以他们的图书馆的旅客。如果您想知道$ P {sectionId}是否大于新整数(“0”),那么即使$ P {sectionId}小于新整数(“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的数字,并附带发布的解决方案。