2017-10-16 95 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())。這是定義轉換的理想方式(如果你想完全按照你希望的東西。)

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