вторник, 18 февраля 2014 г.

Форматирование чисел типа BigDecimal в XTemplate Sencha GXT

B классе com.extjs.gxt.ui.client.core.Ext определена функция форматирования чисел number, но для её использования числа должны быть типа double и значения не должны быть равны 0. Мне понадобилось форматировать числа типа BigDecimal (или другого потомка Number). Для этого я добавил функцию bigdecimal в перечень функций форматирования. Привожу исходный код:
package com.devcity.dgp.gwt.client;

import com.google.gwt.i18n.client.NumberFormat;
import com.extjs.gxt.ui.client.widget.form.DualListField;

public class DialogCopyData {

 public DialogCopyData() {
  DualListField moneys = new DualListField();
  addBigDecimalFormat();
  moneys.getFromList().setDisplayField("money");
  moneys.getFromList().setTemplate(getMoneyTemplate());
  moneys.getToList().setDisplayField("money");
  moneys.getToList().setTemplate(getMoneyTemplate());
 }
  
 private static String bigDecimalFormat(Number val) {
  return NumberFormat.getFormat("###,###,##0.00").format(val);
 }

 private static native void addBigDecimalFormat() /*-{
  $wnd.GXT.Ext.apply($wnd.GXT.Ext.util.Format, {
   bigdecimal: function(val) {
    return @com.devcity.dgp.gwt.client.DialogCopyData::bigDecimalFormat(Ljava/lang/Number;)(val);
   }
  });
 }-*/;

 private static native String getMoneyTemplate() /*-{
  return ['<tpl for="."><div class="x-combo-list-item" role="option">',
   '{money:bigdecimal}</div></tpl>'].join("");
 }-*/;
}