我正在使用Vaadin文本字段,并且希望将其限制为仅支持数字。我试图覆盖setValue()并返回而不调用super。如果文本不是数字,则为setValue()。但这似乎不起作用。我该如何纠正?
我正在使用Vaadin7。我认为它也不支持NumberField。

最佳答案

如果我理解您提出的问题正确,那么您希望有一个字段可以忽略所有不是数字的输入,而不仅要将该字段标记为无效。 Vaadins体系结构设计为浏览器中的每个字段在服务器上都有其表示形式。在我看来,实现此目的的最简单方法是拥有一个浏览器字段,该字段允许输入字母和其他错误字符。我在Vaadin 7中找不到这样的字段。vaadin6似乎有一个名为Number Field的附加组件,但我没有对其进行测试。
您有多种选择:

  • 将此插件移植到vaadin 7或要求作者这样做
  • 编写您自己的字段。也许扩展VTextField和TextFieldConnector
  • 在服务器端做所有事情,并接受延迟和流量(恕我直言,很丑)

  • 由于我认为选项3是而不是,所以我可能不应该显示此代码,但这是实现此目的的最快方法。
    public class IntegerField extends TextField implements TextChangeListener {
    String lastValue;
    
    public IntegerField() {
        setImmediate(true);
        setTextChangeEventMode(TextChangeEventMode.EAGER);
        addTextChangeListener(this);
    }
    
    @Override
    public void textChange(TextChangeEvent event) {
        String text = event.getText();
        try {
            new Integer(text);
            lastValue = text;
        } catch (NumberFormatException e) {
            setValue(lastValue);
        }
    }
    }
    

    关于java - 如何创建仅在vaadin中支持数字的文本字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17144798/

    10-12 03:26
    查看更多