другой формат чисел в iReport и Jasper Server - PullRequest
2 голосов
/ 02 апреля 2012

я создал отчет в iReport, где текстовое поле в формате:

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

В iReport результат составляет 1 234,56 €, что нормально.Я нахожусь в Словакии, и это обычный формат здесь.В Jasper Server результат 1 234,56 €, что не в порядке.

Другой вопрос: для Словакии еще есть Sk (Словацкая корона).Можно ли установить его на евро?

Не могли бы вы мне помочь, что установить где?

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 июня 2012

У меня установлена ​​более старая версия jasperserver на одном из моих клиентов, и ее обновление будет немного проблематично. Я испытываю то же самое с iReport 4.1.1. Моя локаль pt_BR, и я не хотел менять локаль сервера.

Я заметил, что iReport достаточно умен (или туп), чтобы не добавлять атрибут класса в класс 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 правильно отображает мой отчет.

2 голосов
/ 06 апреля 2012

Если вы жестко закодируете формат, чтобы использовать запятую для разделителя тысяч, невозможно, чтобы iReport проигнорировал это. Похоже, вы не сделали то, что думаете.

Но, похоже, вам нужно настроить сервер JasperReports на использование другой локали. Вы можете редактировать этот файл:

WEB-INF/applicationContext-security.xml

Вы найдете раздел локали. Добавьте то, что вам нужно для Словакии. Затем вы можете выбрать эту локаль на странице входа.

Или может быть полезно установить локаль в скрипте запуска Tomcat (или на любом используемом вами сервере приложений). Эти параметры Java могут решить вашу проблему (конечно, вы не захотите en_US ... но это параметры):

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