我正在尝试显示表单级别的验证错误。
问题是 bean valiation 错误集始终为空,即使我在验证器中设置断点时可以看到验证器返回 ValidationResult.error()。
验证者
public class AtLeastOneRole implements Validator<Member>
{
private static final long serialVersionUID = 1L;
public AtLeastOneRole()
{
}
@Override
public ValidationResult apply(Member entity, ValueContext context)
{
if (entity.roles.isEmpty())
return ValidationResult.error("The Member must be assign at least one Role");
return ValidationResult.ok();
}
public String toString()
{
return "AtLeastOneRole";
}
}
上述验证器通过以下方式绑定到表单:
@Override
protected void bindFields(Binder<Member> binder)
{
binder.forField(this.firstnameField).asRequired("Please enter the user's firstname.").bind(Member::getFirstname,
Member::setFirstname);
binder.forField(this.surnameField).asRequired("Please enter the user's surname.").bind(Member::getSurname,
Member::setSurname);
binder.forField(this.rolesGrid).bind(Member::getRoles, Member::setRoles);
// this validator is returning an error
// but the error isn't reflected in teh call to getBeanValidationErrors
binder.withValidator(new AtLeastOneRole());
}
我设置了 Bean
binder.setBean(member);
正在返回字段级别的错误,但不返回表单级别。
我通过以下方式检索错误:
BinderValidationStatus<Member> status = binder.validate();
final var fieldErrors = status.getFieldValidationErrors();
final var formErrors = status.getBeanValidationErrors();