Каковы хорошие способы указания пользовательских форматов валюты, чисел и даты и времени в GWT? - PullRequest
3 голосов
/ 03 июня 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

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

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

0 голосов
/ 08 августа 2011
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);
...