Vaadin 8에서 모든 양식 데이터를 전송하여 유효성 검사를 완료하는 방법은 무엇입니까? 유감스럽게도 저는 바인더 개념을 이해하지 못합니다. (필자는 필드 유효성 검사를 작성했으나 지금은 무엇을하고 있습니까? 사용자가 필드를 채울 것을 요구할 때 볼 수 있지만 모든 양식의 유효성을 검사하는 쉬운 방법이 있습니까? 내 것은 내 양식이 유효 저장 버튼 내 편집기에서바인더로 양식 유효성 확인
을 임 발리
@SpringComponent
@PrototypeScope
public class VaadinStringEditor extends TextField implements HasValueComponent<String> {
private Binder<String> binder;
BinderValidationStatus<String> status;
@PostConstruct
public void init() {
setWidth("100%");
binder = new Binder<>();
}
@Override
public void initDefaults() {
setValue("");
status = 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));
}
public BinderValidationStatus<String> getStatus() {
return status;
}
public void setStatus(BinderValidationStatus<String> status) {
this.status = status;
}
public boolean validate() {
BinderValidationStatus<String> status = binder.validate();
return status.isOk();
}
}
}
를 정의하는 TextEditorConfiguration 추가 나는 또한이 :
public class TextFieldConfiguration implements EditorConfiguration {
private Validator<String> validator;
private int validated;
public TextFieldConfiguration(Validator<String> validator) {
this.validator = validator;
}
public TextFieldConfiguration() {
this.validator = null;
}
public Validator<String> getValidator() {
return validator;
}
public int getValidated() {
return validated;
}
public void setValidated(int validated) {
this.validated = validated;
}
}
제 경우에는 DateEditor와 같은 편집자가 많이 있습니다. UI Valtidation이 잘 작동합니다. 한 달이 지나면 양식을 보내지 못하도록 단추를 제출하는 방법을 찾을 수 없습니다. 폼 클래스에서
내가 예를 들어 모든 질문에 정의 : 내가 버튼을 제출해야question = new AseQuestion(AseQuestionId.DATE_OF_NOTIFICATION, EditorType.DATE_EDITOR);
question.setDescription(
"When it happend?");
question.setEditorConfiguration(new DateFieldConfiguration(dateRequiredValidator(), dateNotAllowedValidator()));
return question;
question = new AseQuestion(AseQuestionId.QUESTION2, EditorType.STRING_EDITOR);
question.setDescription("
"Write something");
private Validator<String> textRequiredValidator() {
return Validator.from(v -> v != null && StringUtils.trimAllWhitespace((String) v).length() != 0,
"It cannot be empty!!!");
그리고 클래스를
public class QuestionWindow extends Window {
@Autowired
private transient VaadinStringEditor editor;
private Button createSaveButton() {
Button saveButton = new Button(i18n.getWithDefault("newAseQuestions.save", "Übernehmen"));
saveButton.addClickListener(e -> {
if (editor.getBinder.validate()) {
Notification.show("This is the caption OK", "This is the description",
Notification.Type.HUMANIZED_MESSAGE);
} else {
Notification.show("This is the caption", "This is the description",
Notification.Type.HUMANIZED_MESSAGE);
System.out.println("kurwa");
}
saveAse();
});
return saveButton;
}
에서 더 많은 정보를보기 위해
은 임 :(임이 binder.forField (이) .withValidator (검증) 같은 것을 사용하여 바인딩 개체를 사용하지 않는이 위대한 예를 들어 있지만 내 경우에는 감사 .asRequired 그래서 내 문제는 내 사건으로 유효성 검사를하는 것입니다;) –
유효성 검사를 사용할 수있는 것보다 더 많은 수의 유효성 검사를 사용할 수 있습니다 ("필수"). bind (s -> getValue(), (b, v) 내 예제에서는 VaadinStringEditor에서 상태를 가져옵니다. 어쩌면 당신은 당신이 더 나은 대답을 줄 수 있도록 양식으로 달성하고자하는 목표를 제공 할 수 있습니다. – Tom
@Tom'validate()'메소드에서 인라인 리턴을 사용할 수 있습니다. @Anna K 실제 객체에 바인딩하지 않고 유효성을 검사하려는 경우이 답변 (https://stackoverflow.com/a/46607223/3403011)을 살펴볼 수 있습니다. – Thibstars