我正在使用 Spring Data JPA 来建模和验证我的数据。在本例中,我得到了一个同时具有 apassword
和字段的类confirm
:
public class RegistrationForm {
private String password;
private String confirm;
// ...
}
现在我想检查它们是否匹配。我发现我可以使用以下方法为其创建一个方法@AssertTrue
:
@AssertTrue(message = "Passwords don't match")
private boolean isPasswordMatch() {
return password.equals(confirm);
}
现在在我的控制器中我验证这个类并且这个方法运行得很好。我现在的问题是我无法弄清楚如何在我的 Thymeleaf 模板中显示此错误。我通常将其用于带有验证的字段:
<span th:if="${#fields.hasErrors('username')}" th:errors="*{username}"></span>
但这不适用于方法。现在我调查了一下,发现如果我将该方法命名为类似于isXXX
then 的名称,它将在Errors
名为 的实例中放入一个字段XXX
。在本例中,它将是一个名为 的字段passwordMatch
。我可以使用调试器验证这一点。
ViolationFieldError
即使该字段错误与任何其他错误一样存在,它也不起作用。作为参考,我尝试过这个:
<span th:if="${#fields.hasErrors('passwordMatch')}" th:errors="*{passwordMatch}"></span>
我只是收到一条错误消息,指出该属性不可读:
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?
注意:我目前正在阅读“Spring in Action”第 6 版,这出现在第 5 章“保护 Spring”中,但我的问题与此无关,因为这本书本身没有对该类实现验证。