Ich habe Probleme mit Thymeleaf beim Validieren Formular. Ich versuche, einfaches Benutzerregistrierungsformular zu schaffen, um Frühling zu erlernen, und ich bin leider fest.Spring Boot + Thymelaf - Formular Validierung
Hier ist meine Klasse Userform
public class UserForm {
@NotEmpty
private String username;
@NotEmpty
private String password;
@NotEmpty
private String passwordConfirm;
...Getters and setters...
}
Das erste Problem ist, wenn ich in meiner initBinder benutzerdefinierten Validator-Klasse hinzufügen
@Autowired
private UserFormValidator formValidator;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(formValidator);
}
"Default" kommentiert von @NotEmpty Validierung nicht mehr funktioniert. Das ist ein ausgeartetes Verhalten?
Das zweite Problem ist, wie kann ich globale ablehnen Nachrichten in thymeleaf zeigen? Meine Validator-Klasse ist wie unten
public class UserFormValidator implements Validator {
@Autowired
UserService userService;
@Override
public boolean supports(Class<?> clazz) {
return UserForm.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
UserForm userForm = (UserForm) target;
if(!userForm.getPassword().equals(userForm.getPasswordConfirm())) {
errors.reject("passwords.no.match", "Passwords not match");
}
if(userService.findOneByUsername(userForm.getUsername()).isPresent()) {
errors.reject("user.exist", "User already exists (default)");
}
}
}
und Post-Mapping von der Steuerung
@PostMapping("/create")
public String registerUser(@ModelAttribute("form") @Valid final UserForm form, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
return "newuser";
}
userService.saveUser(form);
return "redirect:/";
}
als "default" Validierungsfehler i unter Verwendung von ex th zeigen kann: if = "$ {# fields.hasErrors ('passwordConfirm')} " ich habe keine Ahnung, wie kann ich Nachricht für Fehler passwords.no.match zeigen oder überprüfen, ob dieser Fehler aufgetreten ist?
Vielen Dank :) –