2017-10-10 8 views
0

임 만약 angel에서 검증을 작성하려고 비어 있지만 날짜 필드가 나는이를 achived 한이angel이라는 유효성 검사 날짜,하지

@Override 
    public void setConfiguration(EditorConfiguration editorConfiguration) { 
    boolean required = ((DateFieldConfiguration) editorConfiguration).isRequired(); 
    if (required == true) { 
     setRequiredIndicatorVisible(true); 
     addValueChangeListener(event -> validate(event.getSource().getDefaultValidator(), event.getValue())); 

    } 

} 

    private void validate(Validator<LocalDate> defaultValidator, LocalDate localDate) { 

     binder.forField(this).withValidator(validator).asRequired("Mandatory").bind(s -> getValue(), 
      (b, v) -> setValue(v)); 

} 

같은 것을 쓴

비어있는 경우 내가 확인하는 방법을 이해하지 않습니다 텍스트 필드와 검증 :

enter image description here

문자열 검사기 코드

,363,210
public class VaadinStringEditor extends TextField implements HasValueComponent<String> { 

/** 
* 
*/ 
private static final long serialVersionUID = 6271513226609012483L; 
private Binder<String> binder; 

@PostConstruct 
public void init() { 
    setWidth("100%"); 
    binder = new Binder<>(); 
} 

@Override 
public void initDefaults() { 
    setValue(""); 
    binder.validate(); 
} 

@Override 
public void setConfiguration(EditorConfiguration editorConfiguration) { 
    Validator<String> validator = ((TextFieldConfiguration) editorConfiguration).getValidator(); 
    if (validator != null) { 
     binder.forField(this).withValidator(validator).asRequired("Mandatory").bind(s -> getValue(), 
       (b, v) -> setValue(v)); 

    } 

여기에 내가 유효한 :

question.setEditorConfiguration(new TextFieldConfiguration(textRequiredValidator())); 

검사기 :

private Validator<String> textRequiredValidator() { 
    return Validator.from(v -> v != null && StringUtils.trimAllWhitespace((String) v).length() != 0, 
      , "Not empty"); 
} 
+0

[Vaadin docs] (https://vaadin.com/docs/v8/framework/datamodel/datamodel-forms.html#datamodel.forms.validation)에 따르면 'asRequired (message) '(또는 다른 유효성 검사기를 추가 한 후) _Ok_ 버튼 클릭 리스너 (또는 사용자가 가지고있는 모든 것)에서 binder.validate()를 호출 할 수 있습니다. 어디서 붙어 있었 니? – Morfic

+0

LocalDate를 가져와 비어 있는지 확인하지 못했습니다. bind.forField (this) .withValidator (validator) .asRequired ("필수") bind (s -> getValue(), (b, v) -> setValue (v)); localDate 유효성 검사기 작성 방법을 알고 있습니까 –

+0

설명서를 읽었습니까? 가치를 확인해야하는 것은 당신이 아닙니다. 바인더는 정의 된 유효성 검사기를 사용하여 값을 검사하고 모두 통과하면 바인드 된 빈의 값을 업데이트합니다. – Morfic

답변

0

당신은 LocalDatecom.vaadin.ui.DateField을 사용해야합니다. 다음 예를 살펴보십시오.

예 콩 :

public class MyBean { 
    private LocalDate created; 

    public LocalDate getCreated() { 
     return created; 
    } 

    public void setCreated(LocalDate created) { 
     this.created = created; 
    } 
} 

편집기 어떤 이유로 편집 날짜 com.vaadin.ui.TextField을하고 싶은 경우에, 당신이 같은 컨버터를 설정해야

DateField dateField = new DateField("Date selector"); 
binder.forField(dateField) 
     .bind(MyBean::getCreated, MyBean::setCreated); 

:

Binder<MyBean> binder = new Binder<>(); 
TextField textDateField = new TextField("Date here:"); 
binder.forField(textDateField) 
     .withNullRepresentation("") 
     .withConverter(new StringToLocalDateConverter()) 
     .bind(MyBean::getCreated, MyBean::setCreated); 

변환기 구현 :

public class StringToLocalDateConverter implements Converter<String, LocalDate> { 
    @Override 
    public Result<LocalDate> convertToModel(String userInput, ValueContext valueContext) { 
     try { 
      return Result.ok(LocalDate.parse(userInput)); 
     } catch (RuntimeException e) { 
      return Result.error("Invalid value"); 
     } 
    } 

    @Override 
    public String convertToPresentation(LocalDate value, ValueContext valueContext) { 
     return Objects.toString(value, ""); 
    } 
} 

이 변환기는 더 복잡한 경우에 고려해야하는 정보가 들어있는 ValueContext 개체를 사용하지 않습니다. 예를 들어 사용자 로캘을 처리해야합니다.