如何通過發送Vaadin 8中的所有表單數據完成驗證?不幸的是,我不明白結合劑的概念:(我寫了一個字段驗證,但現在呢?它的工作。我的用戶看到我什麼時候要求他填寫一個字段,但有沒有簡單的方法來驗證我的所有表單?我怎麼能「告訴」我的保存按鈕,我的方式是有效的使用Binder進行表單驗證
在我的編輯林定義驗證
@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) - > setValue(v));所以我的問題是如何做我的情況驗證;) –
比你可以使用驗證mehtod從我的例子中獲取VaadinStringEditor的狀態。也許你可以提供你想要達到的目標,所以我可以給你一個更好的答案。 – Tom
@Tom你可以在你的'validate()'方法中使用內聯返回。 @Anna K如果您想要驗證而不綁定到實際對象,您可能需要查看此答案:https://stackoverflow.com/a/46607223/3403011。 – Thibstars