Каковы хорошие способы указать пользовательские форматы валюты, числа и даты и времени в GWT?

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

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

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

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


person Pieter Breed    schedule 03.06.2009    source источник


Ответы (2)


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

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

person nomad    schedule 27.08.2009
comment
В итоге я сделал что-то подобное. Пришлось использовать всевозможные странные хаки, но теперь все работает нормально. - person Pieter Breed; 28.08.2009

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);
person juan    schedule 08.08.2011
comment
Не могли бы вы объяснить, почему это работает, что он делает по-другому? - person Pieter Breed; 10.08.2011