我正在学习Spring Framework和Thymeleaf.我知道如何通过使用类似${#fields.errors("xx")}的方式显示字段错误.但是,我对如何在Thymeleaf中显示对象错误消息感到困惑.
I am learning Spring Framework and Thymeleaf. I have known how to display field error by using something like ${#fields.errors("xx")}. However, I get stuck about how to display object error message in Thymeleaf.
这是我的 UserForm 类:
@PasswordMatches public class UserForm { @NotNull @NotEmpty private String username; @NotNull @NotEmpty private String password; @NotNull @NotEmpty private String matchingPassword; @NotNull @NotEmpty @ValidEmail private String email; /* setter and getter methods */这是我的 PasswordMatches 批注:
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = PasswordMatchesValidator.class) @Documented public @interface PasswordMatches { String message() default "Passwords don't match"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } class PasswordMatchesValidator implements ConstraintValidator<PasswordMatches, Object> { @Override public void initialize(PasswordMatches constraintAnnotation) { } @Override public boolean isValid(Object obj, ConstraintValidatorContext context){ UserDto user = (UserDto) obj; return user.getPassword().equals(user.getMatchingPassword()); } }这是我的 Controller 方法:
@RequestMapping(value="/registration", method=RequestMethod.POST) public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid UserForm userForm, BindingResult result, WebRequest request, Errors errors) { if (!result.hasErrors()) { return new ModelAndView("registerSuccess"); } else { return new ModelAndView("registration", "user", userForm); } }现在这是我的问题:如果 密码 字段和 confirmPass 字段不匹配,怎么办如何获取Thymeleaf中类级别注释返回的默认错误消息?
Now here is my problem: If the password field and confirmPass field doesn't match, how can I get the default error message returned by the class level annotation in Thymeleaf?
推荐答案我知道这是旧帖子,但我也遇到了这个问题,这是解决方法(也许也会对其他人有所帮助): 将PasswordMatchesValidator修改为此:
I know this is old post but I also encountered this problem and here is the soulution (maybe it will also help someone else): Modify PasswordMatchesValidator to this:
class PasswordMatchesValidator implements ConstraintValidator<PasswordMatches, Object> { @Override public void initialize(PasswordMatches constraintAnnotation) { } @Override public boolean isValid(Object obj, ConstraintValidatorContext context){ UserDto user = (UserDto) obj; boolean isValid = user.getPassword().equals(user.getMatchingPassword()); if(!isValid){ context.disableDefaultConstraintViolation(); context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()) .addPropertyNode( "matchingPassword" ).addConstraintViolation(); } return isValid;}
它将验证结果绑定到您的"matchingPassword"属性.因此,在您的百里香模板中,如下所示:
it will bind the validation result to your 'matchingPassword' attribute. So in your thymeleaf template us it like this:
${#fields.errors("matchingPassword")}更多推荐
春季班级验证和Thymeleaf
发布评论