Textbox仅允许gwt中的十进制值和数字

Textbox仅允许gwt中的十进制值和数字,gwt,Gwt,我正在GWT中使用验证。我有一个文本框。在该字段中,它只接受整数和十进制值,而不接受特殊字符。我使用了正则表达式模式“[0-9*]”,但它不接受十进制值。你能给我一个解决办法吗 提前感谢。您必须对textBox进行子类化,并在子类中处理转换。例如,创建一些“大小数框”。 然后在将要验证的对象中使用它 private static final String MIN_VALUE = "0.00"; private static final String MAX_VALUE = "99999.99";

我正在GWT中使用验证。我有一个文本框。在该字段中,它只接受整数和十进制值,而不接受特殊字符。我使用了正则表达式模式“[0-9*]”,但它不接受十进制值。你能给我一个解决办法吗


提前感谢。

您必须对textBox进行子类化,并在子类中处理转换。例如,创建一些“大小数框”。 然后在将要验证的对象中使用它

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。如果你是一个企业开发人员,这是不可能的!IMO GWT默认情况下应提供一个BigDecimalBox。

GWT具有特定于树的文本框,用于输入数字: ,及


这些文本框将验证输入文本的格式,并返回整型、长型或双精度值。

我知道这很旧,但我有同样的问题

我在com.github.gwtbootstrap.client.ui包中找到了GWT引导的BigDecimalBox。它提供了一个BigDecimalRenderer(用于显示)和一个BigDecimalParser(用于解析)


您需要检查用户按下的键,并防止处理无效键。我通过子类化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;
}

}

请看,对十进制值使用double是不明智的。查看此帖子了解详细信息。好观点@otonglet。我错过了这一部分。在这种情况下,我认为最好扩展
ValueBox
,而不是像DoubleBox那样扩展普通的
TextBox