2017-10-16 132 views
0

我试图创建从字符串场Vaadin浮点型字段(我不知道任何其他方法)Vaadin浮动场

我有一个验证这应该让我一个字符串场将只是一个浮动领域。我发现只有一个整数的解决方案?如何确保我的用户只能键入浮点数?

@Override 
public void setConfiguration(EditorConfiguration editorConfiguration) { 
    Validator<String> validator = ((FloatFieldConfiguration) editorConfiguration).getValidator(); 
    if (validator != null) { 
     binder.forField(this).withValidator(validator) 
       .withConverter(new StringToFloatConverter("Must enter a number")) 
       .bind(s -> getValue(), (b, v) -> setValue(v)); 
    } 
} 
+0

您可以简单地创建一个验证器类,并断言,如果'!(价值instanceOf Double)'然后抛出异常(根据您的需要)并使用验证器 – Mandy8055

回答

4

可以有多种方式来实现自己的目的,但我会建议你通过实现Converter接口使用自定义转换器。

这里的东西,你可以尝试:

class CustomConverter implements Converter<String, Double> { 
    @Override 
    public Result<Double> convertToModel(String fieldValue, ValueContext context) { 
// Produces a converted value or an error 
try { 
    // ok is a static helper method that creates a Result 
    return Result.ok(Double.valueOf(fieldValue)); 
} catch (NumberFormatException e) { 
    // error is a static helper method that creates a Result 
    return Result.error("Please enter a decimal value"); 
    } 
} 
    //for business object 
@Override 
    public String convertToPresentation(Double dbl, ValueContext context) 
    { 
// Converting to the field type should always succeed, 
// so there is no support for returning an error Result. 
return String.valueOf(dbl); 
} 
} 

之后,你可以简单地调用CustomConverterwithConverter()方法内(如.withConverter(new CustomConverter()).bind())。这是定义转换的理想方式(如果你想完全按照你希望的东西。)

希望它可以成为你的目的.. :)