2017-10-16 7 views
0

(私は他の方法を知らない;)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); 
} 
} 

あなたは、単にwithConverter()メソッド内CustomConverterを呼び出すことができます(.withConverter(new CustomConverter()).bind()のように):ここで

はあなたが試すことができるものです。これは、コンバージョンを定義するための理想的な方法です(あなたが望むとおりに何かをしたい場合。)

が、それはあなたの目的を果たすホープ.. :)