0

我正在尝试显示表单级别的验证错误。

问题是 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();
4

0 回答 0