Comment terminer la validation avec l'envoi de toutes les données de formulaire dans Vaadin 8? Malheureusement, je ne comprends pas le concept de liant :(J'ai écrit une validation sur le terrain, mais qu'est-ce que ça fait? Mon utilisateur voit quand je lui demande de remplir un champ mais y a-t-il un moyen facile de valider mon formulaire? à mon bouton de sauvegarde que ma forme est valideValidation de formulaire avec le classeur
Dans mon éditeur Im définissant un validateur
@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();
}
}
}
J'ai aussi un TextEditorConfiguration ajouté:
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;
}
}
Dans mon cas, il y a beaucoup d'éditeurs comme DateEditor et ainsi de suite. Validation de l'interface utilisateur fonctionne bien. Depuis un mois, je ne peux pas trouver un moyen de le connecter à soumettre le bouton pour éviter d'envoyer un formulaire.
Dans la classe de formulaire I ont défini toutes les questions par exemple:
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!!!");
Et la classe où j'ai un bouton soumettre
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;
}
Merci pour ce bel exemple, mais dans mon cas je ne suis pas en utilisant un objet pour lier :(Im en utilisant quelque chose comme ça binder.forField (ce) .withValidator (validateur) .asRequired ("Obligatoire"). Bind (s -> getValue(), (b, v) -> setValue (v)); Donc, mon problème est comment faire la validation avec mon cas;) –
Que vous pouvez utiliser la méthode de validation de mon exemple pour obtenir le statut de VaadinStringEditor. Peut-être que vous pouvez fournir l'objectif que vous voulez atteindre avec le formulaire afin que je puisse vous donner une meilleure réponse. – Tom
@Tom Vous pouvez utiliser un retour en ligne dans votre méthode 'validate()'. @Anna K Si vous cherchez à valider sans vous lier à un objet réel, vous pouvez jeter un oeil à cette réponse: https://stackoverflow.com/a/46607223/3403011. – Thibstars