Estou usando Spring Data JPA para modelar e validar meus dados. Neste caso, recebi uma classe que possui um campo password
e confirm
:
public class RegistrationForm {
private String password;
private String confirm;
// ...
}
e agora quero verificar se ambos combinam. Eu descobri que posso criar um método para isso usando @AssertTrue
:
@AssertTrue(message = "Passwords don't match")
private boolean isPasswordMatch() {
return password.equals(confirm);
}
Agora no meu controlador eu valido essa classe e esse método funciona perfeitamente. Meu problema agora é que não consegui descobrir como exibir esse erro no meu modelo Thymeleaf. Normalmente usei isso para campos com validação:
<span th:if="${#fields.hasErrors('username')}" th:errors="*{username}"></span>
Mas isso não funciona com métodos. Agora investiguei um pouco e descobri que se eu nomear o método com algo assim isXXX
, ele colocará um campo na Errors
instância chamada XXX
. Neste caso, seria um campo chamado passwordMatch
. Eu poderia verificar isso usando um depurador.
Não funciona, mesmo que esse erro de campo exista como ViolationFieldError
qualquer outro erro. Para referência, tentei isso:
<span th:if="${#fields.hasErrors('passwordMatch')}" th:errors="*{passwordMatch}"></span>
Simplesmente recebo um erro dizendo que a propriedade não é legível:
Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'passwordMatch' of bean class [me.squidxtv.tacocloud.model.RegistrationForm]:
Bean property 'passwordMatch' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
Nota: Atualmente estou passando pela 6ª edição do "Spring in Action" e isso aparece no capítulo 5 "Protegendo o Spring", mas minha pergunta não está relacionada a isso, porque o livro em si não implementa validação para essa classe.