2009-06-03 3 views
3

У меня есть проект GWT, в котором мне нужно вручную указывать формат валюты, числа и даты и времени. Эти настройки включают указание символов валюты, разделителя группировки, десятичного разделителя, форматов отрицательных чисел и т. Д. Каким будет лучший способ выполнить это?Каковы наилучшие способы определения пользовательских валют, чисел и форматов даты и времени в GWT?

Должен ли я использовать класс GWT NumberFormat? NumberFormat широко использует конструкторы интернационализации GWT, такие как интерфейс Constants и т. Д. Поэтому, если вы указываете маску формата пользовательского номера, она все равно будет смотреть на текущую локаль и использовать эти денежные символы, десятичные символы и разделители тысяч, как указано в поздний и интернационализированный экземпляр «NumberFormat».

Мой вопрос: как бы вы выполнить это? Можете ли вы повторно реализовать функциональность NumberFormat? Не могли бы вы извлечь из него и использовать защищенный конструктор и передать его в какой-то пользовательский экземпляр NumberConstant, который вы создали сами? Как получить экземпляр i18n NumberConstants и использовать его для заполнения вашего собственного экземпляра и переопределить только то, что вы хотите?

Как вы подходите к этой проблеме?

ответ

2

Я использовал NumberFormat.getFormat (формат String) для форматирования форматированных валют (удаление «US» перед знаком $).

В моем приложении я положил результат в общедоступную константу. Я сохранил аргумент «format» в наборе ресурсов i18n, а также все специфические строки пользовательского интерфейса.

+0

я закончил тем, что делал что-то подобное. Должен иметь все виды странных хаков, но он работает нормально. –

0
 
public class MyNumberFormat extends NumberFormat{ 

    private static CurrencyCodeMapConstants currencyCodeMapConstants = GWT.create(CurrencyCodeMapConstants.class); 

    protected MyNumberFormat(String pattern, CurrencyData cdata, 
      boolean userSuppliedPattern) { 
     super(pattern, cdata, userSuppliedPattern);  
    } 

    public static NumberFormat getCurrencyFormat(String currencyCode) {  
     return new MyNumberFormat(defaultNumberConstants.currencyPattern(), 
      lookupCurrency(currencyCode), false); 
     } 

     private static CurrencyData lookupCurrency(String currencyCode) { 
     CurrencyData currencyData = CurrencyList.get().lookup(currencyCode); 

     Map currencyMap = currencyCodeMapConstants.currencyMap();  

     String code = currencyData.getCurrencyCode(); 
     //String symbol = currencyData.getCurrencySymbol(); 
     String symbol = currencyMap.get(currencyCode); 
     int fractionDigits = currencyData.getDefaultFractionDigits(); 
     String portableSymbol = currencyData.getPortableCurrencySymbol();  

     return toCurrencyData(code, symbol, fractionDigits, portableSymbol); 
     } 

     public static native CurrencyData toCurrencyData(String code, String symbol, int fractionDigits, String portableSymbol) /*-{ 
     return [ code, symbol, fractionDigits, portableSymbol ]; 
     }-*/; 
} 

я мог бы использовать в GXT сетки

 
     column = new ColumnConfig("precioventa", constants.modeloPrendaPrecioVenta(), 100); 
     column.setAlignment(HorizontalAlignment.RIGHT);   
     column.setNumberFormat(MyNumberFormat.getCurrencyFormat("PEN"));   
     columns.add(column); 
+0

Вы хотите объяснить, почему это работает, что он делает по-другому? –

Смежные вопросы