iReport和Jasper Server中的数字格式不同

时间:2012-04-02 13:00:51

标签: jasper-reports ireport jasperserver

我在iReport中创建了报告,其中的文本字段为格式:

new DecimalFormat("#,##0.00").format($F{NUMBER}) + " €"

在iReport中,结果是1 234,56€,这没关系。我在斯洛伐克,这是普通的格式。 在Jasper Server中的结果是1,234.56€,这是不行的。

其他问题:斯洛伐克还有Sk(斯洛伐克王室)。是否可以将其设置为欧元?

你能帮助我,在哪里设置?

由于

2 个答案:

答案 0 :(得分:2)

如果您将格式硬编码为千位分隔符使用逗号,则iReport不可能忽略它。听起来你没有做过你的想法。

但似乎您需要将JasperReports Server设置为使用不同的区域设置。您可以编辑此文件:

WEB-INF/applicationContext-security.xml

您将找到区域设置部分。添加斯洛伐克所需的内容。然后,您可以在登录页面上选择此区域设置。

或者在Tomcat的启动脚本(或您正在使用的任何应用服务器)中设置区域设置可能会有所帮助。这些Java参数可能会解决您的问题(当然您不需要en_US ...但这些是参数):

java -Duser.language=en -Duser.region=US

答案 1 :(得分:2)

我在我的一个客户端部署了一个较旧版本的jasperserver,升级它会有点痛苦。我在使用iReport 4.1.1时遇到了同样的问题。我的语言环境是pt_BR,我真的不想改变我的服务器语言环境。

我注意到iReport足够聪明(或愚蠢),不能将class属性添加到textFieldExpression类中(我猜它是从变量/字段类型猜测的)。另一方面,Jasperserver(至少我正在使用的版本)如果没有为该表达式指定类,则不会将模式应用于数字。

换句话说:iReport生成此标记并按预期呈现:

<textField pattern="###,###,##0.00" isBlankWhenNull="true">
    <reportElement mode="Transparent" x="1293" y="0" width="92" height="20"/>
    <textElement textAlignment="Right" verticalAlignment="Middle">
        <font isBold="true"/>
    </textElement>
    <textFieldExpression><![CDATA[$V{my_var}]]></textFieldExpression>
</textField>

您可以假设 my_var 是BigDecimal。此字段无法在服务器中正确呈现,因为它只是忽略模式(可能因为它假设所有字段都是字符串?),除非您为textFieldExpression指定表达式类:

<textField pattern="###,###,##0.00" isBlankWhenNull="true">
    <reportElement mode="Transparent" x="1293" y="0" width="92" height="20"/>
    <textElement textAlignment="Right" verticalAlignment="Middle">
        <font isBold="true"/>
    </textElement>
    <textFieldExpression class="java.math.BigDecimal"><![CDATA[$V{my_var}]]></textFieldExpression>
</textField>

请注意最后一行中的 class =“java.math.BigDecimal”。我不得不手动编辑jrxml文件,但至少Jasperserver正确呈现我的报告。