如何通过发送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