Ich habe versucht, die JSF 2.0 mit Bohnen Validierung auf Klassenebene wie die folgenden lernen: -Die JSR 303 Bean Validierung Die erweiterte ConstraintValidator kann nicht die CDI verwendet
Das Dienstprogramm
@Singleton
public class MyUtility {
public boolean isValid(final String input) {
return (input != null) || (!input.trim().equals(""));
}
}
die Constraint Annotation
@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 {};
}
die Constraint validator
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());
}
}
Die Daten bean
@Validatable
public class MyBean {
private String name;
//Getter and Setter here
}
Die JSF Backing Bean
@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.
}
}
}
Nach dem Ausführen ich die Ausnahme als java.lang.NullPointerException
in der Klasse konfrontiert habe den Namen "Validator" an der Linie return this.myUtil.isValid(myBean.getName());
. Ich verstehe, dass der CDI meine Dienstprogramminstanz nicht injiziert. Bitte korrigieren Sie mich, falls ich falsch liege.
Ich bin mir nicht sicher, ob ich etwas falsch mache oder es eine Bean-Validierung Einschränkung ist. Könnten Sie bitte weiter erklären?
Vielen Dank für Ihren Rat. –
Ich bin mir ziemlich sicher, dass Emmanuel und der Rest der EG die CDI-Unterstützung für die nächste Runde der Bean Validation hinzufügen. – LightGuard
Tatsächlich ist das ein [Thema] (https://hibernate.onjira.com/browse/bval-238) für BV 1.1. Sie können mehr im Dokument [früher Entwurf] (http://beanvalidation.org/1.1/spec/#d0e6698) erfahren. Lass uns wissen was du denkst. – Gunnar