2014-09-25 27 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; 
    } 
} 

現在貨幣符號正常顯示。