2017-10-16 10 views
0

나는 문자열 필드에서 만약 angel의 float 필드를 만들려고 내가 허용해야 검증이angel이라는 플로트 필드

날 그 문자열 필드 플로트 필드 일뿐입니다. 정수에 대한 솔루션을 찾았습니까? 내 사용자가 부동 소수점 숫자 만 입력 할 수 있도록하는 방법은 무엇입니까?

@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()을 같은). 이것은 당신의 변환을 정의 할 수있는 이상적인 방법입니다 (당신은 당신이 원하는대로 정확하게 일을합니다.)

이 당신의 목적을 제공 희망 ... :)