Die JSR 303-Bean-Validierung. Der erweiterte ConstraintValidator kann die CDI nicht verwenden

Ich habe versucht, JSF 2.0 mit Bean-Validierung auf Klassenebene wie folgt zu lernen:

Das Dienstprogramm

<code>@Singleton
public class MyUtility {
    public boolean isValid(final String input) {
       return (input != null) || (!input.trim().equals(""));
    }
}
</code>

Die Einschränkungsannotation

<code>@Retention(RetentionPolicy.RUNTIME)
@Target({
    ElementType.TYPE,
    ElementType.ANNOTATION_TYPE,
    ElementType.FIELD
    })
@Constraint(validatedBy = Validator.class)
@Documented
public @interface Validatable {
    String  message() default "Validation is failure";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
</code>

Der Constraint Validator

<code>public class Validator extends ConstraintValidator<Validatable, MyBean> {
    //
    //----> Try to inject the utility, but it cannot as null.
    //
    @Inject
    private MyUtility myUtil;

    public void initialize(ValidatableconstraintAnnotation) {
        //nothing
    }

    public boolean isValid(final MyBean myBean, 
                           final ConstraintValidatorContext constraintContext) {

        if (myBean == null) {
            return true;
        }
        //
        //----> Null pointer exception here.
        //
        return this.myUtil.isValid(myBean.getName());
    }
}
</code>

Die Datenbohne

<code>@Validatable
public class MyBean {
    private String name;
    //Getter and Setter here
}
</code>

Die JSF Backing Bean

<code>@Named
@SessionScoped
public class Page1 {
    //javax.validation.Validator
    @Inject
    private Validator validator;

    @Inject
    private MyBean myBean;

    //Submit method
    public void submit() {
        Set<ConstraintViolation<Object>> violations = 
                         this.validator.validate(this.myBean);
        if (violations.size() > 0) {
            //Handle error here.
        }
    }
}
</code>

Nach dem Laufen habe ich die Ausnahme als konfrontiertjava.lang.NullPointerException in der Klasse mit dem Namen "Validator" in der Zeilereturn this.myUtil.isValid(myBean.getName());. Ich verstehe, dass das CDI meine Dienstprogramminstanz nicht injiziert. Bitte korrigieren Sie mich, wenn ich falsch liege.

Ich bin mir nicht sicher, ob ich etwas falsch mache oder ob es sich um eine Bean-Validierungsbeschränkung handelt. Könnten Sie bitte helfen, weiter zu erklären?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage