2013-09-18 3 views
1

Я использую проверку в GWT. У меня есть текстовое поле. В этом поле он принимает только целые числа и десятичные значения, отличные от специальных символов. Я использовал шаблон регулярного выражения «[0-9 *]», но он не принимает десятичные значения. Можете ли вы дать мне одно решениеТекстовое поле допускает только десятичные значения и цифры в gwt

Заранее спасибо.

+0

См http://stackoverflow.com/questions/2811031/decimal-or-numeric-values-in-regular-expression-validation –

ответ

2

Вы должны подклассифицировать textBox и обрабатывать преобразование в вашем подклассе. То есть создайте «BigDecimalBox». Затем используйте это в объекте, который будет проверен.

private static final String MIN_VALUE = "0.00"; 
private static final String MAX_VALUE = "99999.99"; 
@DecimalMax(value = MAX_VALUE) 
@DecimalMin(value = MIN_VALUE) 
private BigDecimal mortgage; 

Избегайте использования double для десятичных значений. Это known Java trap и нет-нет, если вы являетесь разработчиком предприятия! IMO GWT должен предоставить BigDecimalBox по умолчанию.

+0

+1 для использования BigDecimal –

1

GWT имеет древовидную специфический TextBox для ввода числа: IntegerBox, LongBox и DoubleBox.

Текстовое поле тезисов будет проверять формат входного текста и возвращать целочисленное, длинное или двойное значение.

+0

+1 для DOUBLEBOX –

+1

Это неразумно использовать double для десятичных значений. Проверьте это сообщение для получения более подробной информации http://stackoverflow.com/a/6320316/1722236. – otonglet

+0

Хорошая точка @otonglet. Я пропустил эту часть. В этом случае я думаю, что лучше будет расширять 'ValueBox ' вместо простого 'TextBox', как это делается для DoubleBox. –

0

Я знаю, что это старый, но у меня был тот же вопрос.

Я нашел BigDecimalBox GWT Bootstrap в пакете com.github.gwtbootstrap.client.ui. Он предоставляет BigDecimalRenderer (для отображения) и BigDecimalParser (для синтаксического анализа).

https://gwtbootstrap.github.io/

0

Вы должны проверить нажатой клавиши пользователем и предотвратить обработку поврежденных ключей. Я сделал это, выполнив подкласс IntegerBox и используя KeyDownHandler для проверки соответствующих случаев. Вот полный класс.

public class IntegerTextBox extends IntegerBox { 

public IntegerTextBox() { 
    super(); 
} 

public void initialize() { 

    addKeyDownHandler(new KeyDownHandler() { 
     public void onKeyDown(KeyDownEvent event) { 
      int keyCode = event.getNativeKeyCode(); 

      if (event.isAnyModifierKeyDown()) 
       cancelKey(); 

      switch (keyCode) { 
       case KeyCodes.KEY_LEFT: 
       case KeyCodes.KEY_RIGHT: 
       case KeyCodes.KEY_DELETE: 
       case KeyCodes.KEY_BACKSPACE: 
       case KeyCodes.KEY_ENTER: 
       case KeyCodes.KEY_ESCAPE: 
       case KeyCodes.KEY_TAB: 
        return; 
      } 

      String parsedInput = parseNumberKey(keyCode); 
      if (parsedInput.length() > 0) { 
       return; 
      } 
      else { 
       cancelKey(); 
      } 

     } 
    }); 
} 

/** 
* Varifies that the key pressed is either a number key or a numeric pad key. Converts numeric pad keys to the string 
* representation of their number values. 
* 
* @param keyCode - the key code. 
* @return the key's number representation as a string. 
*/ 
@SuppressWarnings("nls") 
private String parseNumberKey(int keyCode) { 
    String result = new String(); 

    switch (keyCode) { 
    case KeyCodes.KEY_ZERO: 
    case KeyCodes.KEY_ONE: 
    case KeyCodes.KEY_TWO: 
    case KeyCodes.KEY_THREE: 
    case KeyCodes.KEY_FOUR: 
    case KeyCodes.KEY_FIVE: 
    case KeyCodes.KEY_SIX: 
    case KeyCodes.KEY_SEVEN: 
    case KeyCodes.KEY_EIGHT: 
    case KeyCodes.KEY_NINE: 
     return result = String.valueOf((char) keyCode);    
    case KeyCodes.KEY_NUM_ZERO: 
     return result = "0"; 
    case KeyCodes.KEY_NUM_ONE: 
     return result = "1"; 
    case KeyCodes.KEY_NUM_TWO: 
     return result = "2"; 
    case KeyCodes.KEY_NUM_THREE: 
     return result = "3"; 
    case KeyCodes.KEY_NUM_FOUR: 
     return result = "4"; 
    case KeyCodes.KEY_NUM_FIVE: 
     return result = "5"; 
    case KeyCodes.KEY_NUM_SIX: 
     return result = "6"; 
    case KeyCodes.KEY_NUM_SEVEN: 
     return result = "7"; 
    case KeyCodes.KEY_NUM_EIGHT: 
     return result = "8"; 
    case KeyCodes.KEY_NUM_NINE: 
     return result = "9"; 
    } 
    return result; 
} 

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