2009-06-03 14 views
3

Ich habe ein GWT-Projekt, in dem ich Währung, Zahl und Datetime-Formate manuell angeben muss. Diese Anpassungen umfassen die Angabe der Währungssymbole, Gruppierungstrennzeichen, Dezimaltrennzeichen, Negativnummernformate usw. Was wäre der beste Weg, dies zu erreichen?Was sind gute Möglichkeiten, um benutzerdefinierte Währung, Anzahl und Datum/Uhrzeit-Formate in GWT zu spezifizieren?

Sollte ich die Klasse GWT NumberFormat verwenden? NumberFormat benutzt intensiv die GWT Internationalisierungskonstrukte wie die Constants Schnittstelle. Wenn Sie daher eine benutzerdefinierte Zahlenformatmaske angeben, wird immer noch das aktuelle Gebietsschema betrachtet und die Währungssymbole, das Dezimalsymbol und die Tausendertrennzeichen verwendet, wie in spät gebundene und internationalisierte "NumberFormat" -Instanz.

Meine Frage ist: Wie würde Sie dies erreichen? Würden Sie die Funktionalität von NumberFormat erneut implementieren? Würden Sie davon ableiten und den geschützten Konstruktor verwenden und ihn in einer Art benutzerdefinierter NumberConstant s Instanz übergeben, die Sie selbst erstellt haben? Wie wäre es, die i18n NumberConstants-Instanz zu bekommen und damit Ihre eigene Instanz zu füllen und nur das zu überschreiben, was Sie wollen?

Wie würden Sie dieses Problem angehen?

Antwort

2

Ich habe NumberFormat.getFormat (String-Format) für benutzerdefinierte Währungsformatierung verwendet (Entfernen von "US" vor dem $ -Zeichen).

In meiner Anwendung legte ich das Ergebnis in die öffentliche Konstante. Ich habe das Argument "Format" im i18n-Ressourcenpaket sowie alle UI-spezifischen Zeichenfolgen gespeichert.

+0

ich ähnlich, etwas zu tun am Ende nutzen könnten. Musste alle Arten von seltsamen Hacks haben, aber es funktioniert jetzt ok. –

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 ]; 
     }-*/; 
} 

ich in GXT Gitter

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

Möchten Sie erklären, warum das funktioniert, was es anders macht? –

Verwandte Themen