2014-09-25 29 views
0

我最初编写了一个使用JasperReports的桌面应用程序。JasperReports中的Web应用程序中的货币问题

在此应用程序中,用户可以动态更改区域设置,并且此更改将反映在报告中。这工作正常。

我有一个具有相同功能的Web应用程序。一切工作正常,除了货币符号,我得到¤而不是符号。日期根据语言环境正确格式化,数字格式也是如此。唯一的问题是货币符号。我在桌面应用程序中没有这个问题,即使我在两种情况下都使用完全相同的jrxml文件来生成报告。所以这个问题不能来自jrxml文件。 有谁知道如何解决这个问题?

UPDATE: 好吧,如果我使用命令

myLocale = Locale.CANADA; 

,然后我通过myLocale变量的碧玉报告一切正常,但因为我的web应用程序,用户可以选择任何一个语言环境,他/她要我创建一个循环方式如下:

Locale myLocale = Locale.getDefault(); 
Locale[] locales = Locale.getAvailableLocales(); 
int localeCount = locales.length; 
for (int i = 0; i < localeCount; i++) { 
    if (locales[i].getDisplayName().equals(##Whatever the user chose##)) 
     myLocale = locales[i]; 
} 

在这种情况下,当我传递变量myLocale到碧玉报告我得到的货币符号上面提到的问题(但不能与数字格式和日期)。有人能指出上面的代码有什么问题吗?谢谢。

+0

这篇文章可以帮助你:[在碧玉报告中将字符串格式化为货币格式](http://stackoverflow.com/q/10913495/876298) – 2014-09-25 11:00:10

+0

该链接没有帮助我。抱歉。 – user3245747 2014-09-25 12:48:01

回答

0

我找到了解决问题的办法。显然我需要从语言环境列表丢弃那些不满足以下条件:myLocale.get(J).getCountry()长度()> 0的代码现在变为:

Locale[] locales = Calendar.getAvailableLocales(); 
//Convert to list in order to remove some elements 
List<Locale> locales2 = new ArrayList<Locale>(Arrays.asList(locales)); 
int localeCount = locales2.size(); 
for (int j = 0; j < localeCount; j++) { 
    if (!(locales2.get(j).getCountry().length() > 0)) { 
     locales2.remove(j); 
     localeCount--; 
    } 
} 
//Now loop over the list in search for the selected locale 
for (int i = 0; i < localeCount; i++) { 
    if (locales2.get(i).getDisplayName().equals(**whatever the user chose**)) { 
     myLocale = locales2.get(i); 
     break; 
    } 
} 

现在货币符号正常显示。